这是我的输入字典:
dict = {"key1": [value1, value2], "key2": ["value3", "value4", "value5"]}
我需要以下结果:
[(key1, value1), (key1, value2), (key2, value3) ...]
如何在python中做到这一点?
我想用它来创建一个table1,以便通过“值”将其连接到table2。
答案 0 :(得分:3)
自从标记pandas
s=pd.Series(d).apply(pd.Series).stack()
list(zip(s.index.get_level_values(0),s))
Out[869]:
[('key1', 'value1'),
('key1', 'value2'),
('key2', 'value3'),
('key2', 'value4'),
('key2', 'value5')]
答案 1 :(得分:1)
如果您想要使用纯Python的方法:
[(k, inner) for k, v in dct.items() for inner in v]
[('key1', 'value1'),
('key1', 'value2'),
('key2', 'value3'),
('key2', 'value4'),
('key2', 'value5')]
我建议不为字典使用名称dict
,因为它会覆盖内置类型构造函数。
答案 2 :(得分:1)
首先单独在Python(3.6版之前)中意识到dict的命令是无序的。因此,结果元组列表中的顺序可能与字典的分配不同。
鉴于此,您可以执行以下操作:
di={"key1": ["value1", "value2"], "key2": ["value3", "value4", "value5"]}
result=[]
for k,li in di.items():
for e in li:
result.append((k,e))
答案 3 :(得分:0)
看起来您只想要这样简单的东西:
my_dict = {"key1": ["value1", "value2"], "key2": ["value3", "value4", "value5"]}
my_list = []
for my_key, value_list in my_dict.items():
for value in value_list:
my_list.append({my_key:value})
print(my_list)
输出:
[{'key1': 'value1'}, {'key1': 'value2'}, {'key2': 'value3'}, {'key2': 'value4'},
{'key2': 'value5'}]
我特意将其保持为非常基本。迭代您的字典,迭代每个值列表,构建一个字典,然后将该字典追加到新列表中。有多种方法可以做到这一点,这只是一种非常易读/易于理解的选择。
答案 4 :(得分:0)
使用列表理解
l = [(i, j) for i in d for j in d[i]]
# [('key1', 'value1'), ('key1', 'value2'), ('key2', 'value3'), ('key2', 'value4'), ('key2', 'value5')]