问题描述
这是我的输入字典:
dict = {"key1": [value1, value2], "key2": ["value3", "value4", "value5"]}
我需要以下结果:
[(key1, value1), (key1, value2), (key2, value3) ...]
我该如何在python中做到这一点?
我想使用它来创建一个table1,以便通过“值”将其连接到table2。
1楼
自从标记了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')]
2楼
如果您想要使用纯Python的方法:
[(k, inner) for k, v in dct.items() for inner in v]
[('key1', 'value1'),
('key1', 'value2'),
('key2', 'value3'),
('key2', 'value4'),
('key2', 'value5')]
我建议不要为字典使用名称dict
,因为它会覆盖内置类型构造函数。
3楼
单独在Python中(版本3.6之前的版本)首先要实现dict的排序。 因此,结果元组列表中的顺序可能与对dict的分配不同。
鉴于此,您可以执行以下操作:
di={"key1": ["value1", "value2"], "key2": ["value3", "value4", "value5"]}
result=[]
for k,li in di.items():
for e in li:
result.append((k,e))
4楼
看起来您只想要这样的简单内容:
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'}]
我故意将其保留为最基本的内容。 迭代您的字典,迭代每个值列表,构建一个字典,然后将该字典追加到新列表中。 有多种方法可以执行此操作,这只是一种非常易读/易于理解的选项。
5楼
使用列表理解
l = [(i, j) for i in d for j in d[i]]
# [('key1', 'value1'), ('key1', 'value2'), ('key2', 'value3'), ('key2', 'value4'), ('key2', 'value5')]