如何在列表中插入指向多个词典的词典

How can I insert a dictionary that points to multiple dictionaries inside a list

任何人都可以用以下代码帮助我:

[{k: {x: y for x, y in b.items()} for b in arg for k in range(len(arg))}]

其中 arg 是:

arg = [{"key1": "val1", "key2": "val2"}, {"key1": "val3", "key2": "val4"}]

我正在寻找的输出是:

[0: {"key1": "val1", "key2": "val2"}, 1: {"key1": "val3", "key2": "val4"}]

当我运行上面的字典理解时,我得到

[0: {"key1": "val3", "key2": "val4"}, 1: {"key1": "val3", "key2": "val4"}]

为什么 1: 指向的第二个字典也在 0: 处重复出现?我怎样才能阻止这种情况的发生,并让嵌套的字典具有独立的价值。两个嵌套字典中的键相同,但值必须不同。

你想要的输出有点问题。你想要一个 Dictionary 而你的

The output Im looking for is:

[0: {"key1": "val1", "key2": "val2"}, 1: {"key1": "val3", "key2": "val4"}]

是一个list。所以,有效的输出应该是:

{0: {'key1': 'val1', 'key2': 'val2'}, 1: {'key1': 'val3', 'key2': 'val4'}}

通过以下方式获得:

{ i:l[i] for i in range(len(l)) }

# OR

{ i:key for i,key in enumerate(l) }

#驱动值

IN : l = [{"key1":"val1", "key2":"val2"}, {"key1":"val3", "key2":"val4"}]
OUT : {0: {'key1': 'val1', 'key2': 'val2'}, 1: {'key1': 'val3', 'key2': 'val4'}}

编辑: 使用 enumerate 提供更短的方法。也来看看吧。

如果我的解释正确,您需要一本字典中的字典。这将做到这一点:

{index: val.copy() for index, val in enumerate(arg)}

其中 arg 是您预定义的词典。

编辑:上面的用户 是一种巧妙的方法!

你把事情复杂化了。只需使用 enumerate() function,它会立即生成您的键值对 :

dict(enumerate(arg))

dict() 采用可迭代的键值对:

>>> arg = [{"key1": "val1", "key2": "val2"}, {"key1": "val3", "key2": "val4"}]
>>> dict(enumerate(arg))
{0: {'key1': 'val1', 'key2': 'val2'}, 1: {'key1': 'val3', 'key2': 'val4'}}

arg中的词典没有被复制;如果这是一个问题,您可以使用 map() 而不是 dict.copy:

dict(enumerate(map(dict.copy, arg)))

或者使用单字典理解:

{i: a.copy() for i, a in enumerate(arg)}

您的代码创建了一个双循环;你基本上是这样做的:

_dictionary = {}
for b in arg:
    for k in range(len(arg)):
        _dictionary[k] = {x: y for x, y in b.items()}
result = [_dictionary]

因此,对于 arg 中的每个字典,您创建 另一个 循环并重复为 b 创建字典。 k 的最后一个这样的字典将获胜,并且由于 arg 中的最后一个字典被分配给 01,它将替换 arg 中的任何其他字典(其中每个也分配给之前的所有整数键)。

您也不需要使用 {x: y for x, y in b.items()},只需 b.copy() 就足够了。我也不确定你为什么将最终结果放入列表中。

你的代码很复杂。怎么样: [{k: arg[k]} for k in range(len(arg))]