我正在逐行阅读excel文件来创建词典并将它们附加到列表中,所以我有一个列表如下:
myList = []
和这种格式的字典:
dictionary = {'name': 'John', 'code': 'code1', 'date': [123,456]}
所以我这样做:myList.append(dictionary)
,到目前为止一切顺利。现在我进入下一行,我有一个非常相似的词典:
dictionary_two = {'name': 'John', 'code': 'code1', 'date': [789]}
我想检查'name' = 'John'
中是否已有myList
字典,所以我使用此功能检查:
def checkGuy(dude_name):
return any(d['name'] == dude_name for d in myList)
目前我正在编写此功能以将这些人添加到列表中:
def addGuy(row_info):
if not checkGuy(row_info[1]):
myList.append({'name':row_info[1],'code':row_info[0],'date':[row_info[2]]})
else:
#HELP HERE
在其他地方我想dict.update(updated_dict)
,但我不知道如何在这里获取字典。
有人可以提供帮助,dictionary
会附加dictionary_two
的值吗?
答案 0 :(得分:2)
我会将checkGuy
修改为:
def findGuy(dude_name):
for d in myList:
if d['name'] == dude_name:
return d
else:
return None # or use pass
然后做:
def addGuy(row_info):
guy = findGuy(row_info[1])
if guy is None:
myList.append({'name':row_info[1],'code':row_info[0],'date':[row_info[2]]})
else:
guy.update(updated_dict)
答案 1 :(得分:0)
这个答案建议粘贴在评论中,建议如果“name”是唯一可以搜索的标准,那么它可以用作字典中的键而不是列表。
master = {"John" : {'code': 'code1', 'date': [123,456]}}
def addGuy(row_info):
key = row_info[1]
code = row_info[0]
date = row_info[2]
if master.get(key):
master.get(key).update({"code": code, "date": date})
else:
master[key] = {"code": code, "date": date}
答案 2 :(得分:0)
如果您在每次看到重复名称时 dict.update 现有数据,您的代码可以缩小到您读取文件的位置。使用相同的键调用现有dicts的更新将覆盖最后一次出现的值,即使你有多个" John"说到最后他们都会包含完全相同的数据。
def read_file():
results = {name: {"code": code, "date": date}
for code, name, date in how_you_read_into_rows}
如果你真的认为值以某种方式附加,那你就错了。如果你想这样做,你需要一个非常不同的方法。如果您确实想要收集每个用户的日期和代码,请使用 defauldict 将代码,日期对附加到名称为关键字的列表中:
from collections import defaultdict
d = defaultdict(list)
def read_file():
for code, name, date in how_you_read_into_rows:
d["name"].append([code, date])
或者某些变化取决于您希望最终输出的样子。