在用键声明的字典中插入列表列表的值

Insert values of list of lists in a dictionary declared with keys

提问人:Jordi Lazo 提问时间:8/30/2022 最后编辑:Jordi Lazo 更新时间:8/31/2022 访问量:91

问:

我有这个列表列表:

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 中的解决方案会更好。

list python-2.7 字典 嵌套列表

评论

0赞 fsimonjetz 8/30/2022
如果您控制着创建字典,请注意,初始化这样的字典几乎没有用处,至于首选解决方案(请参阅 Andrej Kesely 的答案),您只需要密钥。长话短说,只需列出键。ddd = ['x', 'y', ...]

答:

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))dxd


编辑:我建议从:ddictlist

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 或更好,请创建一个列表,将键作为此列表的项目。OrderedDictdd
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]