2012-11-03 85 views
-2

我有一个非常简单的想法,但并不知道如何去做。我有两个不同长度的列表(比如一个是50,另一个是200)。Python将多个值从一个列表关联到另一个列表

所以

len(x) = 50 
len(y) = 200 

我想要做的就是打印出一些线路,其中从X的一个值对应的y多个值(如果是重复的数字并不重要)。

I.e. suppose x = [1,2,3,4] 
y = [7,8,9,10,11,12,13,14,15,16,17] 

I want to print out: 
1: 7 
1: 8 
1: 9 
1: 10 
2: 11 
2: 12 
2: 13 
3: 14 
3: 15 
3: 16 
4: 17 

从y随机化值并不重要。 无论为每个x值打印出多少个多值,都无关紧要。我基本上试图编写一个从一个表中插入多个元素到另一个表的SQL脚本,并使用python编写脚本。

我知道这可以通过简单地遍历最小的列表和具有多个f.write()语句,同时增加一些变量以使y的多个值与x的单个值相关联来完成。但这并没有涵盖y的所有价值,而且看起来有点愚蠢。有没有更好的方式去做这件事?

编辑:对于我如何得出键与值的关联的问题,关联多少个值1键(存在8的上限)并不重要。可以只有1个值或多个(最多8个)。话又说回来,可以有按键之间的值的重复(即在我的例子中没有,但关键4可以说有7/8的值也)

+0

我在结果字典的键和它们各自的值之间找不到任何模式。你能解释两者应该如何结合? – Blender

+0

@准确地说,为什么有4个值与1相关联,4个值与4相关?对此的任何逻辑? – num3ric

+0

添加了对这些问题的回答 – Paul

回答

0

试试这个Python的解决方案:

>>> x = [1,2,3,4] 
>>> y = [7,8,9,10,11,12,13,14,15,16,17] 
>>> lnx, lny = len(x), len(y) 
>>> groupatleast = (lny + lnx - 1) // lnx 
>>> x2y = {} 
>>> for i in range(lnx): 
    x2y[x[i]] = y[i*groupatleast: (i+1)*groupatleast] 


>>> x2y[x[i]] += y[(i+1)*groupatleast:] 
>>> for x1,ylist in sorted(x2y.items()): 
    for y1 in ylist: 
     print ("%i: %i" % (x1, y1)) 


1: 7 
1: 8 
1: 9 
2: 10 
2: 11 
2: 12 
3: 13 
3: 14 
3: 15 
4: 16 
4: 17 
>>> 
>>> # Help: 
>>> lnx, lny 
(4, 11) 
>>> groupatleast 
3 
>>> x2y 
{1: [7, 8, 9], 2: [10, 11, 12], 3: [13, 14, 15], 4: [16, 17]} 
>>> ylist 
[16, 17] 
>>> 
+0

嗯,这使得它更容易。非常感谢。应该能够更轻松地创建mt查询! – Paul

0
>>> xs = [1,2,3,4] 
>>> ys = [7,8,9,10,11,12,13,14,15,16,17] 

>>> for (i, y) in enumerate(ys): 
>>> print "%d: %d" % (xs[len(xs) * i/len(ys)], y) 
1: 7 
1: 8 
1: 9 
2: 10 
2: 11 
2: 12 
3: 13 
3: 14 
3: 15 
4: 16 
4: 17 

>>> import itertools 
>>> for x, y in itertools.izip(itertools.cycle(xs), ys): 
...  print "%d: %d" % (x, y) 
... 
1: 7 
2: 8 
3: 9 
4: 10 
1: 11 
2: 12 
3: 13 
4: 14 
1: 15 
2: 16 
3: 17 
相关问题