如何合并密钥计数变化的字典值

时间:2016-02-22 07:23:02

标签: python dictionary

我无法合并字典的值,而字典的密钥数不同

我找到了一个使用两个列表的工作示例,例如

t1 = [1,2,3]
t2 = ["a","b","c"]
output = list(zip(t1, t2))

导致[(1, 'a'), (2, 'b'), (3, 'c')] ......首次成功。

但是我需要压缩字典中的所有值,这些值在键值的计数上有所不同。 (有时候有2个键,有时是4个等等。)

是否有办法使用动态输入执行zip,具体取决于键的数量

让我们说

t1 = [1,2,3]
t2 = ["a","b","c"]
generated_rows = OrderedDict()
generated_rows['t1'] = t1
generated_rows['t2']=t2

output = list(zip(??*))

预期产出如上:

[(1, 'a'), (2, 'b'), (3, 'c')]

但是zip方法的参数应该以某种方式以动态的方式来自字典。以下变量dicts应该与该方法一起使用:

d1 = {'k1':[0,1,2], 'k2':['a','b','c']}
d2 = {'k1':[0,1,2], 'k2':['a','b','c'], 'k3':['x','y','z']}
d3 = ...

解决方案(感谢托德):

d1 = {'k1':[0,1,2], 'k2':['a','b','c']}
o = list(zip(*d1.values()))

1 个答案:

答案 0 :(得分:2)

如果你的第二段代码准确地表示你想用N个不同的列表做什么,那么代码可能是:

t1 = [ 1, 2, 3 ]
t2 = [ 'a', 'b', 'c' ]
# And so on
x = []
x.append( t1 )
x.append( t2 )
# And so on
output = zip(*x)

您不需要额外的list(),因为zip()已经返回了一个列表。 *运算符有时也称为“{1}}运算符。运算符,当像这样使用时表示解包参数。

使用列表代替字典,因为' splat'运算符并不保证它在超出&#34时解包事物的顺序;在迭代它时所讨论的类型的任何顺序"。如果选择键以强制执行正确的排序,则可以使用有序字典。