提问人:Jordi Lazo 提问时间:8/30/2022 最后编辑:Jordi Lazo 更新时间:8/31/2022 访问量:91
在用键声明的字典中插入列表列表的值
Insert values of list of lists in a dictionary declared with keys
问:
我有这个列表列表:
x = [['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11'],
['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11'],
['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11']]
我有一个声明的字典,例如:
d = {"x": None, "y": None, "z": None, "t": None,
"a": None, "s": None, "m": None, "n": None,
"u": None, "v": None, "b": None}
我想要得到的是一个列表或词典,例如:
result = [{"x": x1,
"y": x2,
"z": x3,
"t": x4,
"a": x5,
"s": x6,
"m": x7,
"n": x8,
"u": x9,
"v": x10,
"b": x11}, {"x": x1,
"y": x2,
"z": x3,
"t": x4,
"a": x5,
"s": x6,
"m": x7,
"n": x8,
"u": x9,
"v": x10,
"b": x11}...]
等等。列表中的每个元素 x(列表列表)内各有一个字典。
python3 中的解决方案是正确的,但是 python2 中的解决方案会更好。
答:
4赞
Andrej Kesely
8/30/2022
#1
尝试:
result = [dict(zip(d, subl)) for subl in x]
print(result)
指纹:
[
{
"x": "x1",
"y": "x2",
"z": "x3",
"t": "x4",
"a": "x5",
"s": "x6",
"m": "x7",
"n": "x8",
"u": "x9",
"v": "x10",
"b": "x11",
},
...
将同时遍历字典的键和子列表的值,并创建新的字典(使用子列表的键和子列表的值)。这适用于 Python 3.7+,因为字典保持插入顺序。dict(zip(d, subl))
d
x
d
编辑:我建议从:d
dict
list
from collections import OrderedDict
d = ["x", "y", "z", "t", "a", "s", "m", "n", "u", "v", "b"]
result = [OrderedDict(zip(d, subl)) for subl in x]
print(result)
或:
用:collections.OrderedDict
from collections import OrderedDict
d = OrderedDict(
[
("x", None),
("y", None),
("z", None),
("t", None),
("a", None),
("s", None),
("m", None),
("n", None),
("u", None),
("v", None),
("b", None),
]
)
result = [OrderedDict(zip(d, subl)) for subl in x]
print(result)
评论
1赞
Riccardo Bucco
8/30/2022
在这种情况下,对 python 版本的评论非常重要;)我认为你应该添加它
0赞
Jordi Lazo
8/31/2022
@RiccardoBucco完全同意。在这种情况下,如果我们在 python 2.7 中应用此解决方案,它也可以工作,但它将返回未排序的字典,变量 d 的键将改变出现顺序。
0赞
Andrej Kesely
8/31/2022
@JordiLazo 对于 Python2.7 使用 for 或更好,请创建一个列表,将键作为此列表的项目。OrderedDict
d
d
0赞
Jordi Lazo
8/31/2022
@AndrejKesely,您能分享一下这两种解决方案吗?谢谢。
0赞
Andrej Kesely
8/31/2022
@JordiLazo 查看我的编辑。
1赞
Riccardo Bucco
8/30/2022
#2
从 Python 3.7 开始,字典顺序保证为插入顺序。因此,只有当您使用 Python >=3.7 时,我的答案才有意义。
这是你如何做到的:
result = [dict(zip(d, lst)) for lst in x]
评论
d
d
d = ['x', 'y', ...]