Python将多个值从一个列表关联到另一个列表

时间:2012-11-03 06:21:40

标签: python sql list

我有一个非常简单的想法,但不知道如何去做。我有两个不同长度的列表(比如50合1和200另一个)。

所以

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)

2 个答案:

答案 0 :(得分: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]
>>> 

答案 1 :(得分: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