字典列表

时间:2011-02-21 14:58:14

标签: python list dictionary

我试图创建一个字典列表,但在我看来,我做错了什么:

所以,我有一个元组列表,类似这样:

dict = {}
lst = []
cats = [(u'cat1', u'Matilda'),(u'cat2', u'Mew')]
for line in cats:
    dict['cat_num'] = line[0]
    dict['name'] = line[1]
    lst.append(dict)
print lst

结果我得到了这个清单:

[{'cat_num': u'cat2', 'name': u'Mew'}, {'cat_num': u'cat2', 'name': u'Mew'}]

谁能告诉我我的错误在哪里?

谢谢。

4 个答案:

答案 0 :(得分:5)

在循环中移动dct的定义(并且不要将其称为dict,因为这是类的名称):

lst = []
cats = [(u'cat1', u'Matilda'),(u'cat2', u'Mew')]
for line in cats:
    dct = {}
    dct['cat_num'] = line[0]
    dct['name'] = line[1]
    lst.append(dct)
print lst

答案 1 :(得分:4)

请记住,dict()实际上是构建字典的内置Python函数,因此重命名它可能不是一个好主意。为什么不做类似的事情,

cats = [(u'cat1', u'Matilda'),(u'cat2', u'Mew')]
lst = [dict(cat_num=c,name=n) for c,n in cats]

答案 2 :(得分:1)

首先,您需要为每个元组创建一个字典。在您只使用一个共享字典之前:

lst = []
cats = [(u'cat1', u'Matilda'),(u'cat2', u'Mew')]
for line in cats:
    d = {}
    d['cat_num'] = line[0]
    d['name'] = line[1]
    lst.append(d)
print lst

答案 3 :(得分:0)

由于已经创建了dict,因此您将reference字典附加到数组(lst)并为cats中的每一行修改它。

要看到这一点,每次迭代只需print字典:

tmp = {}
final_results = []
cats = [(u'cat1', u'Matilda'),(u'cat2', u'Mew')]
for line in cats:
    tmp['cat_num'] = line[0]
    tmp['name'] = line[1]
    print "For", line, "the dictionary is", tmp
    final_results.append(dict)

print "The final list is:", final_results 

您需要做的就是每次创建一个新词典,您的问题将得到解决:

final_results = []
cats = [(u'cat1', u'Matilda'),(u'cat2', u'Mew')]
for line in cats:
    final_results.append( \
        {'cat_num': line[0],
        'name': line[1]} \
     )

另请参阅: "Least Astonishment" and the Mutable Default Argument以了解此行为可能让您感到惊讶的其他地方。