在列表中搜索值并输出其键

2024-09-19 19:16:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典,每个键都有一个列表作为它的值,这些列表的大小不同。我使用add和set填充键和值(以避免重复)。如果输出字典,则输出为:

blizzard set(['00:13:e8:17:9f:25', '00:21:6a:33:81:50', '58:bc:27:13:37:c9', '00:19:d2:33:ad:9d'])
alpha_jian set(['00:13:e8:17:9f:25'])  

在这里,暴雪和阿尔法是我字典里的两个关键。你知道吗

现在,我有另一个文本文件,它有两列,比如

00:21:6a:33:81:50    45  
00:13:e8:17:9f:25    59  

如您所见,第一列项目是我的字典的每个列表中的一个条目。例如,00:21:6a:33:81:50属于“暴雪”键,00:13:e8:17:9f:25属于“阿尔法剑”键。你知道吗

我想要的问题是,检查文本文件中的第一列项目,如果在dictionary中找到该列条目,则找到相应的键,在dictionary中找到相应列表的长度,并将它们添加到新dictionary中,比如newDict。
例如00:21:6a:33:81:50属于暴雪。因此,newDict条目将是:

newDict[blizzard] = 4  // since the blizzard key corresponds to a list of length 4.  

这是我希望执行此任务的代码:

newDict = dict()
# myDict is present with entries like specified above
with open("input.txt") as f:
    for line in f:  
        fields = line.split("\t")  
        for key, value in myDict.items():
            if fields[0] == #Some Expression:
                newdict[key] = len(value)  
print newDict  

在这里,我的问题是什么应该是我上面代码中的某个表达式。如果值不是列表,这非常简单。但是如何在列表中搜索呢?提前谢谢。你知道吗


Tags: 项目key代码列表dictionary字典with条目
3条回答

看起来像

if fields[0] in value:

应该会成功的。例如,检查字段是否是集合的成员(这也适用于列表,但至少在列表较大时会慢一点)。你知道吗

(请注意,列表和集合是两种不同的东西;一种是可以包含相同值的多个副本的有序容器,另一种是只能包含每个值的一个副本的无序容器。)

您可能还希望在newdict赋值之后添加一个break,这样就不会一直检查所有其他字典条目。你知道吗

没有

if fields[0] in value:

解决你的问题?或者我不明白你的问题?你知道吗

你在找in

if fields[0] in value:

但这不是一个非常有效的方法,因为它需要反复扫描dict值

您可以创建一个临时数据结构来帮助

helper_dict = {k: v for v, x in myDict.items() for k in x}

所以你的代码变成

helper_dict = {k: v for v, x in myDict.items() for k in x}
with open("input.txt") as f:
    for line in f:  
        fields = line.split("\t")
        key = fields[0]
        if key in helper_dict:
            newdict[helper_dict[key]] = len(myDict[helper_dict[key]])

相关问题 更多 >