将字典隐藏到字典列表中

  • 本文关键字:字典 列表 隐藏 python
  • 更新时间 :
  • 英文 :

dct = {
"a": ["apple", "orange"],
"b": ["beijing", "shanghai"],
"c": ["china"],
}

dct是一个字典,其中的值是一个列表,即:

dct={'x':["xx,"yy"],'y':<another list>,....}

new_list_dct=[
{'a':'apple','b':'beijing','c':'china'},
{'a':'apple','b':'shanghai','c':'china'},
{'a':'orange','b':'beijing','c':'china'},
{'a':'orange','b':'shanghai','c':'china'},
]

我想分割dct中的所有值,并制作一个新的dct列表,列表中的dct与dct是同一个键,但值来自dct的列表,就像上面的一样

我花了两个小时未能从dct转换到new_list_dct,但失败了,有人能帮忙吗?dct可以是任何字典(可能使用不同的密钥(,但结构相同的

我试过的是

new_list_dct=[]
for i in dct['a']:
for j in dct['b']:
for k in dct['c']:
data={'a':i,'b':j,'c':k}
new_list_dct.append(data)
pprint(new_list_dct)

但这种方法并不通用,因为对于给定的dct,密钥不能是"a"、"b"、"c"。

您可以像这个一样递归执行

from copy import deepcopy
dct = {
"a": ["apple", "orange"],
"b": ["beijing", "shanghai"],
"c": ["china"],
}
def recursive(items, index, cur, results):
if index >= len(items):
results.append(cur)
return

temp = items[index]
for i in range(0, len(temp)):
cur.append(temp[i])
z = deepcopy(cur)
recursive(items, index+1, z, results)
cur.pop()

items = [
[{key: value} for value in list_items]
for key, list_items in dct.items()
]
results, cur = [], []
recursive(items, 0, cur, results)
result_dicts = []
for item in results:
f_dict = {}
for each in item:
f_dict.update(each)

result_dicts.append(f_dict)
print(result_dicts)