python在di中搜索值

2024-10-02 14:22:29 发布

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

Python-关于字典,我目前有一个空的(几乎是空的,只有一个伪元素)字典项数组,有一个“name”和一个freq

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

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

下面是我的代码,一开始我认为它工作得很好,后来我意识到似乎没有任何“递增”的发生(freq总是一个)-有人能帮我理解要更改什么吗?你知道吗

提前谢谢! 圣达

#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})

Tags: thenamein元素内容forif字典
3条回答

公认的答案是好的,但是有一个内置的数据结构非常适合这个任务,叫做defaultdict。你知道吗

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

您提供了defaultdict一个可调用的函数,每当您在dict中搜索一个未找到的键时,就会调用该函数,并将其设置为所查找键的对应值。在上面的示例中,您查找了未找到的“Fred”,因此使用零参数调用int,返回int(zero)的标识值,该值随后递增为1,并存储为键“Fred”的值。你知道吗

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

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

感谢所有的回答-佐伊的回答帮助我构建了下面的逻辑-我相信区别在于添加(.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)

相关问题 更多 >