将字典中的键同步到列表中的多个值

时间:2018-06-20 01:15:34

标签: python list dictionary

我有以下格式的列表字典

mydict = 

{ a: [1, 2],
  b: [2, 2],
  c: [1, 0],
  d: [1, 1]
}

和另一个只有两个元素的列表,

mylist =
    [x, y]

我这样从mydict中读取值

for key, values in mydict.items():
    print key, values

此打印,

  a [1, 2]
  b [2, 2]
  c [1, 0]
  d [1, 1]

但是我想要以下输出,

x : [1, 2, 1, 1]
y : [2, 2, 0, 1]

这意味着mydict的第一列和mylist的第一个值构成一个字典。

所以我修改了这样的循环

for key, values in mydict.items():
    newdict = {mylist[0]: mydict[0],
               mylist[1]: mydict[1] 
              }

这给了我想要的输出,

x : [1, 2, 1, 1]
y : [2, 2, 0, 1]

但是问题是,如果mylistmydict的长度增加了,那么它将无法正常工作,我需要手动添加新行,

mylist[2]: mydict[2] 

每次添加mylist中的新值时,如何确保自动分配键而不添加新行?

PS:mydict中列表值的长度将始终等于mylist的长度。

编辑:

我的输出还应该保留mydict中键的值,

x : [1, 2, 1, 1]
y : [2, 2, 0, 1]
keys: a, b, c, d

谢谢

编辑:

        0        1
0       a        [1,2],
1       b        [2,2],
2       c        [1,0],   
3       d        [1,1] 

2 个答案:

答案 0 :(得分:3)

您可以使用 zip 2

dict(zip(['x', 'y'], zip(*dct.values())))

# Result
{'x': (1, 2, 1, 1), 'y': (2, 2, 0, 1)}

这使用了 zip 转置:

>>> list(zip(*dct.values()))
[(1, 2, 1, 1), (2, 2, 0, 1)]

如果您想保留自己的钥匙,

dict(zip(['key', 'x', 'y'], zip(*[(i, *j) for i, j in dct.items()])))

# Result
{'key': ('a', 'b', 'c', 'd'), 'x': (1, 2, 1, 1), 'y': (2, 2, 0, 1)}

答案 1 :(得分:2)

如果使用大数据,则可以使用pandas

import pandas as pd

mydict = { 'a': [1, 2],
  'b': [2, 2],
  'c': [1, 0],
  'd': [1, 1]}

df = pd.DataFrame(mydict)

    0   1
a   1   2
b   2   2
c   1   0
d   1   1

那么您可以获得例如

>>> df.columns = ['x', 'y'] # where ['x', 'y'] is your obj my_list
>>> df.to_dict('list')

{'x': [1, 2, 1, 1], 'y': [2, 2, 0, 1]}

保留键

>>> d = df.to_dict('list')
>>> d.update({'keys':df.index.tolist()})