我有以下格式的列表字典
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]
但是问题是,如果mylist
和mydict
的长度增加了,那么它将无法正常工作,我需要手动添加新行,
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]
答案 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()})