我正在从一个文本文件中导入数据,然后从中制作一个字典。我现在正尝试制作一个单独的条目,仅具有相同值的条目。有可能吗?
抱歉,这有点令人困惑!但基本上,文本文件如下所示:
"Andrew", "Present"
"Christine", "Absent"
"Liz", "Present"
"James", "Present"
我首先把它做成字典,所以我可以将它们分为键和值,现在我试图列出仅“在场”的人(我不想删除不在场的人) ,我只想要一个单独的列表),然后从该列表中随机选择一个。
这是我尝试过的:
d = {}
with open('directory.txt') as f:
for line in f:
name, attendance = line.strip().split(',')
d[name.strip()] = attendance.strip()
present_list = []
present_list.append({"name": str(d.keys), "attendance": "Present"})
print(random.choice(present_list))
当我尝试运行它时,我只会得到:
{'name': '<built-in method keys of dict object at 0x02B26690>', 'attendance': 'Present'}
我应该更改哪一部分?提前非常感谢您!
答案 0 :(得分:0)
Dict.Keys是一种方法,而不是字段。因此,您必须改为:
d.keys()
这将返回一个数组生成器:如果要用方括号将逗号分隔的列表,只需在其上调用str()即可。如果要使用其他格式,请考虑使用','。join(dict.keys())做一个简单的逗号分隔列表,不使用方括号。
更新:
您也没有进行过滤,相反,我会尝试类似的方法,在其中获取状态列表,然后进行编译(新代码以粗体显示):
d = {}
with open('directory.txt') as f:
for line in f:
name, attendance = line.strip().split(',')
**if name.strip() not in d.keys():
d[attendance.strip()] = [name.strip()]
else:
d[attendance.strip()] = d[attendance.strip()].append(name.strip())**
这样,您无需执行所有这些中间步骤,并且您将得到类似{“ present”:“ Andrew,Liz,James”}
的信息。答案 1 :(得分:0)
您可以尝试以下方法:
present_list = [key for key in d if d[key] == "Present"]
答案 2 :(得分:0)
首先,您必须更改读取行的方式,而不是将初始字典作为键attendence
的方式:
from collections import defaultdict
d = defaultdict(list)
with open('directory.txt') as f:
for line in f.readlines():
name, attendance = line.strip().split(',')
d[attendance.strip()].append(name.strip())
present_list = d["Present"]
print(random.choice(present_list) if present_list else "All absent")