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]