我可以将具有相同值的字典项导入列表吗?

时间:2019-09-17 18:03:22

标签: python

我正在从一个文本文件中导入数据,然后从中制作一个字典。我现在正尝试制作一个单独的条目,仅具有相同值的条目。有可能吗?

抱歉,这有点令人困惑!但基本上,文本文件如下所示:

"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'}

我应该更改哪一部分?提前非常感谢您!

3 个答案:

答案 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")