【问题标题】:How to update a list of integers contained inside of a dictionary in python如何更新python字典中包含的整数列表
【发布时间】:2020-03-07 20:37:15
【问题描述】:

我正在尝试创建一个刽子手机器人,它遍历整个英语语言并逐个字符地计算相同长度的每个单词。这个想法是机器人将在 y 索引处返回 x 长度的最常用字符。到目前为止,我已经成功地将所有单词导入到一个列表中,并将该列表过滤为仅 x 长度的单词。我似乎遇到问题的地方是更新 y 索引。

为了完成这项任务,我创建了一个字典,它将列表作为键值存储在该字典中。单词长度的所有索引都已初始化为 0。我的想法是,我将遍历所有单词的整个单词长度,并计算特定索引处字符的出现次数。所以我的字典实际上看起来像:

D = {'a': [0, 0, …, 0], 'b':[0, 0, …, 0], …, 'z': [0, 0, …, 0]}

我想做的是更新每个键和每个键的索引,以便我可以找到在该特定索引处相同长度的所有字母的总出现次数。最终结果将类似于以下内容:

D = {'a': [4137, 568, …, 897], …., 'z':[523, 129, … , 321]}

我当前的解决方案是尝试将索引映射到键,并增加每个索引,但我收到以下错误消息:

TypeError: 列表索引必须是整数或切片,而不是 str

我知道这是一口,但我非常感谢任何帮助。感谢您的时间和耐心。

def occurence_of_characters(L, word):
    length_word = len(word)

    letters = string.ascii_letters
    numbers = string.digits
    characters = letters + numbers + "-" + "."
    characterlist = list(characters)

    D = {i:[0 for j in range(length_word)] for i in characterlist}
    #0 for j in range(length_word)
    for word in L:
        for key in D:
            #l = D.get(key)
            if key in word:
                for index in key:
                    D[key][int(index)] = list(map(map(lambda index: index+1, D[key][index]), D[key] ))
    print(D)

【问题讨论】:

  • 你想要达到的效果有点不清楚,请提供一个示例输入和输出(当然,对于有限的一组单词。)
  • 变量L是做什么的?另外,请缩短解释并提供更多信息(如@lorg 所说)
  • 我想列出一些英语单词,例如:mark、cats、dogs、zips、rats。我想计算每个索引处每个字符的出现次数。根据上面的话,我的返回语句看起来像: D = {'a' : [0, 3, 0, 0], ..., 's': [0, 0, 0, 4], ..., ' z': [1, 0, 0, 0]}
  • L 是相同长度的单词列表。我正在从另一个函数中导​​入它。这工作正常。

标签: python python-3.x list dictionary


【解决方案1】:

你可以这样做:

def occurence_of_characters(word_list):
    length_word = len(word_list[0])
    characters = string.ascii_letters + string.digits + '.-'
    counts = {c:[0]*length_word for c in characters}
    for word in word_list:
        for i, c in enumerate(word):
            if c in counts:
                counts[c][i] += 1
    return counts


my_list = ['mark', 'cats', 'dogs', 'zips', 'rats']
D = occurence_of_characters(my_list)
for c in 'atsz':
    print(f'{c}: {D[c]}')

输出:

a: [0, 3, 0, 0]
t: [0, 0, 2, 0]
s: [0, 0, 0, 4]
z: [1, 0, 0, 0]

【讨论】:

  • 行中发生了什么:for i, c in enumerate(word):. enumerate(word)的意义是什么?另外,我们为什么要做“I, c in enumerate(word)”。这实际上是做什么的?我能够让 counts[c][i] += 1 工作。它确实生成了上述内容。我只是想了解它背后的逻辑。谢谢
  • enumerate(iterable) 接受一个可迭代对象(在本例中为字符串)并返回另一个可迭代对象,其中每个项目都是由索引和原始可迭代对象中的项目组成的元组。所以enumerate("star") say 将返回一个包含(0, "s")(1, "t")(2, "a")(3, "r") 的可迭代项。然后for i, c in enumerate(word) 将遍历这些项目并将每个元组的第一个元素分配给i,将第二个元素分配给c
猜你喜欢
  • 2020-12-07
  • 2011-05-30
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 2016-11-23
  • 1970-01-01
相关资源
最近更新 更多