当前位置: 代码迷 >> python >> Python:将多个值键入字典中的键/值对
  详细解决方案

Python:将多个值键入字典中的键/值对

热度:118   发布时间:2023-07-16 10:16:03.0

这是我的输入字典:

dict = {"key1": [value1, value2], "key2": ["value3", "value4", "value5"]}

我需要以下结果:

[(key1, value1), (key1, value2), (key2, value3) ...]

我该如何在python中做到这一点?

我想使用它来创建一个table1,以便通过“值”将其连接到table2。

自从标记了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')]

如果您想要使用纯Python的方法:

[(k, inner) for k, v in dct.items() for inner in v]

[('key1', 'value1'),
 ('key1', 'value2'),
 ('key2', 'value3'),
 ('key2', 'value4'),
 ('key2', 'value5')]

我建议不要为字典使用名称dict ,因为它会覆盖内置类型构造函数。

单独在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))

看起来您只想要这样的简单内容:

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'}]

我故意将其保留为最基本的内容。 迭代您的字典,迭代每个值列表,构建一个字典,然后将该字典追加到新列表中。 有多种方法可以执行此操作,这只是一种非常易读/易于理解的选项。

使用列表理解

l = [(i, j) for i in d for j in d[i]]    
# [('key1', 'value1'), ('key1', 'value2'), ('key2', 'value3'), ('key2', 'value4'), ('key2', 'value5')]