【发布时间】:2021-02-11 21:30:24
【问题描述】:
我有一本这样的字典:
{
"var1": [0, 1],
"var2": ["foo", "bar"]
}
鉴于上述情况,我想最终得到一个字典列表,如下所示:
[
{ "var1_0_var2_foo": {"var1": 0, "var2": "foo"} },
{ "var1_1_var2_bar": {"var1": 1, "var2": "bar"} }
]
原始字典中每个列表中的键和元素的数量是可变的,可以是任何东西。
这是我看起来凌乱但有效的解决方案:
source = {
'x': ['a', 'b'],
'y': [0, 1],
'z': ['foo', 'bar']
}
target = []
names = list(source.keys())
lists = list(source.values())
zipped = list(zip(*lists))
for item in zipped:
full_name = ""
full_dict = {}
for idx, value in enumerate(item):
full_name += f"{names[idx]}_{value}_"
full_dict[names[idx]] = value
full_name = full_name.rstrip('_')
target.append({full_name: full_dict})
print(target)
输出:
[
{'x_a_y_0_z_foo': {'x': 'a', 'y': 0, 'z': 'foo'}},
{'x_b_y_1_z_bar': {'x': 'b', 'y': 1, 'z': 'bar'}}
]
上述方法可行,但我想知道是否有更好的优雅 Python 方式来执行此操作?
【问题讨论】:
-
想要以字典列表结尾 您提供的列表无效,因为它具有字典声明语法(您指定的
var1_0_var2_foo:仅在dicts) -
请使用有效代码编辑您的问题。
-
抱歉,语法固定。
标签: python list dictionary zip