gpt4 book ai didi

python字典keyError

转载 作者:行者123 更新时间:2023-11-28 19:34:54 27 4
gpt4 key购买 nike

python 的新手,看起来像简单可行的代码产生 KeyError:

patt=list('jkasb')

dict={}
for i in patt:
dict[i]= 1 if dict[i] is None else dict[i]+1 # This line throws error

error: KeyError: 'j'

最佳答案

在您的情况下,发生 KeyError 是因为您试图访问不在字典中的键。最初,字典是空的。因此,其中不存在任何键。

如果您有 C++ 背景,这可能看起来很奇怪,因为 C++ 映射为尚不存在的键提供默认值。您可以使用 collections.defaultdict 在 python 中获得相同的行为。修改后的代码如下。我冒昧地在代码末尾将 defaultdict 转换为常规字典:

from collections import defaultdict
patt='jkasb'

my_default_dict=defaultdict(int)
for i in patt:
my_default_dict[i]+=1

my_dict = dict(my_default_dict) # converting the defaultdict to a regular dictionary

您还可以通过多种其他方式解决此问题。我在下面展示了其中的一些:

  • 通过检查键是否存在于字典中:

    patt='jkasb'

    my_dict={}
    for i in patt:
    my_dict[i]= 1 if i not in my_dict else my_dict[i]+1 # checking if i exists in dict
  • 使用没有默认返回值的 dict.get():

    patt='jkasb'

    my_dict={}
    for i in patt:
    my_dict[i]= 1 if my_dict.get(i) is None else my_dict[i]+1 # using dict.get
    print(my_dict)
  • 使用带有默认返回值的 dict.get():

    patt='jkasb'

    my_dict={}
    for i in patt:
    my_dict[i]= my_dict.get(i, 0)+1 # using dict.get with default return value 0
  • 由于您的代码实际上只是计算每个字符的出现频率,您还可以使用collections.Counter,然后将其转换为字典:

    from collections import Counter
    patt='jkasb'

    character_counter = Counter(patt)

    my_dict = dict(character_counter)

此外,由于 dict 是内置数据类型,我使用 dict 将 defaultdict 和 Counter 转换为普通字典,因此我将字典的名称从 dict 更改为 my_dict。

关于python字典keyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57747406/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com