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