python在字典中搜索值

时间:2018-07-17 17:44:22

标签: python dictionary

Python-关于字典,我目前有一个空的(很好,几乎是空的-具有一个虚拟元素)字典项数组,其中包含一个“名称”和一个频率

[{"name": "XYZ","freq": 1}]

我正在运行一个进程,其中: -我将获得一个新的“名称”值 -如果字典中还不存在,请附加相同的内容 -如果确实存在,我将频率增加1(频率+ = 1)

以下是我的代码,起初我认为它很好用,然后我意识到似乎没有发生任何“递增”(频率始终是一个)-有人可以帮助我了解更改吗? / p>

提前谢谢! 桑达尔

#Dummy array
CompName=[{"name":"","freq":0}]
for file in os.listdir(frame_loc):
#generate name from some process and add the same
    name={"name":CompNameText,"freq":1}
    gen=(CompNameText for name in CompName if CompNameText in name.values())
    if CompNameText in gen:
        name["freq"]=name["freq"]+1
    else:
 #I feel it always executes only the else part of the condition, not the if
        CompName.append({"name":CompNameText,"freq":1})

3 个答案:

答案 0 :(得分:1)

感谢所有回答-Zoe的回答帮助我制定了以下逻辑-我相信区别在于添加(.values())来引用值。 if-else并不是完全简单的方法-整个过程运行完后,我将不得不编写另一个条件进行评估。但是,它现在会做。

我确实希望我可以取消abc = 0,将其删除会引发错误。

CompName=[{"name":"AB","freq":1},
   {"name":"BC","freq":1},
   {"name":"CD","freq":1}]
CompNameText="XY"
abc=0
for AllNames in CompName.values():
    if CompNameText in AllNames["name"]:
        print("Found")
        AllNames['freq']=AllNames['freq']+1
        break
else:
    abc+=1

if abc == len(CompName):
    CompName.append({"name":CompNameText,"freq":1})


print(CompName)

答案 1 :(得分:1)

可接受的答案很好,但是有一个内置数据结构非常适合此任务defaultdict

from collections import defaultdict
namecounts = defaultdict(int)
print(namecounts)
namecounts["Fred"]+=1
print(namecounts)

您提供defaultdict一个可调用对象,并且每当您在未找到的字典中搜索键时,就会调用该函数并将其设置为您要查找的键的对应值。在上面的示例中,您查找了“ Fred”,但未找到它,因此int用零个参数调用,返回了int(零)的标识值,然后将其递增为1并存储为该值键“ Fred”。

答案 2 :(得分:0)

通常,这是字典搜索的更好布局:

if specific_name not in dict:
    dict[specific_name]=0
dict[specific_name] += 1