我需要构建一个字典列表,它由for
循环和if
语句产生,其中每个字典键都相同。我该怎么做?提前致谢
list = []
dict = {}
for item in some_other_list
if item == 0:
dict.update({'the_key_which_is_always_same_word': item.value})
else:
dict.update({'the_key_which_is_always_same_word': item.value})
list
循环之后for
的结果应如下所示:
[{'the_key_which_is_always_same_word': 'value_1'},
{'the_key_which_is_always_same_word': 'value_2'},
{'the_key_which_is_always_same_word': 'value_3'}]
答案 0 :(得分:2)
逻辑就在那里,但我不认为你是在向正确的对象添加项目。
dict.update
更新您创建的字典。通过“更新”,它将加入两个词典。如果密钥已存在,它将使用给定值更新该密钥。如果没有,它将创建一个具有该值的新密钥。因此,您不断更新dict
变量,而不是列表。要将值添加到列表末尾,您应该使用append
。
list = []
for item in some_other_list
dict = {}
if item == 0:
dict['the_key_which_is_always_same_word'] = item.value
else:
dict['the_key_which_is_always_same_word'] = item.value
list.append(dict)
这将做的是,对于循环的每次迭代,创建一个新的字典。如果item
为0,我们会将item.value
写入给定的密钥。否则,我们将其写入不同的密钥。我假设在你的实际代码中,两个键是不同的。如果不是,则此if/else
块无意义。
在此之后,我们将其附加到列表的末尾。
如果您需要,也可以在列表理解的一行中完成:
[{"the_key_which_is_always_same_word":i} if i == 0 else {"the_key_which_is_always_same_word":i} for i in some_other_list]
如果i==0
,第一个字典将被放置在列表中,否则,第二个字典将被放置在列表中。
答案 1 :(得分:0)
您需要将dict.update
更改为list.append
才能获得结果。
实际上,使用列表推导会更清楚:
list = [{'the_key_which_is_always_same_word': item} for item in some_other_list]
如果你想根据item的值生成不同的dict,你可以这样写:
list = [{'key_one': item} if item == 0 else {'key_two': item} for item in some_other_list]
答案 2 :(得分:0)
您必须先将列表转换为一组。因为如果你不这样做,它会在列表中一次又一次地附加相同的字典。这有点无意义。
l1 = [int(a) for a in list("10003204")]
l2 = set(l1)
l3 = []
for a in l2:
c = {}
if a == 0:
c['if_key']=a
l3.append(c)
else:
c['else_key']=a
l3.append(c)
print l1
print l2
print l3
输出:
[1, 0, 0, 0, 3, 2, 0, 4]
set([0, 1, 2, 3, 4])
[{'if_key': 0}, {'else_key': 1}, {'else_key': 2}, {'else_key': 3}, {'else_key': 4}]
如果您希望您的密钥在所有条件下都相同,那么您为什么要使用if else条件?你可以这样做:
for a in l2:
c = {}
c['same_key_always']=a
l3.append(c)