Python 字典目录

Python 字典目录,python,list,dictionary,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',

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

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

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'}]
谁能告诉我我的错误在哪里


谢谢。

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

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

dct
的定义移动到循环内部(不要称之为
dict
,因为这是类的名称):


由于已创建了
dict
,因此您将向字典中的数组(
lst
)添加一个
引用
,并对
cats
中的每一行进行更改

要了解这一点,只需为每次迭代打印词典:

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]} \
     )
另请参见:,了解此行为可能会让您感到惊讶的其他地方。

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

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