构建一个字典列表,它由`for`循环和`if`语句产生,其中每个字典键是相同的

时间:2016-11-30 03:50:55

标签: python list dictionary

我需要构建一个字典列表,它由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'}]

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)