如何在列表中插入指向多个词典的词典
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
中的最后一个字典被分配给 0
和 1
,它将替换 arg
中的任何其他字典(其中每个也分配给之前的所有整数键)。
您也不需要使用 {x: y for x, y in b.items()}
,只需 b.copy()
就足够了。我也不确定你为什么将最终结果放入列表中。
你的代码很复杂。怎么样:
[{k: arg[k]} for k in range(len(arg))]
任何人都可以用以下代码帮助我:
[{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
中的最后一个字典被分配给 0
和 1
,它将替换 arg
中的任何其他字典(其中每个也分配给之前的所有整数键)。
您也不需要使用 {x: y for x, y in b.items()}
,只需 b.copy()
就足够了。我也不确定你为什么将最终结果放入列表中。
你的代码很复杂。怎么样:
[{k: arg[k]} for k in range(len(arg))]