【问题标题】:Python iterating and dictionaryPython迭代和字典
【发布时间】:2014-05-29 06:43:21
【问题描述】:

我正在尝试创建一个字典,其中的键是列表的每 3 个项目,例如 ..(a,b,c) 然后 (b,c,d) 然后 (c,d,e) 和每个键的值是直接下一个字母,因此 (a,b,c) 的值将是 d,而 (b,c,d) 的值将是 e。这是我到目前为止的代码,但问题是当 i 变为 2 时,dict 会尝试附加 L(2+3),这会导致索引错误。另外..如果 num = 4 而不是 3,那么我的代码将不起作用。我能得到一些关于我应该做些什么来解决这两个问题的提示吗?谢谢

L = ['a','b','c','d','e']
num = 3
for i in range(len(L)-2): 
      a_dict[tuple(L[i:i+num])].append(L[i+num])

【问题讨论】:

标签: python loops python-3.x dictionary iterator


【解决方案1】:

您可以像这样在一行中完成:

import string
letters = string.ascii_lowercase
num = 3
mydict = {tuple(letters[i:i+num]):letters[i+num] for i in range(len(letters)-num)}

这里的string.ascii_lowercase 是一个包含小写英文字母的字符串。您可以将其视为列表(切片、元素选择)。

【讨论】:

  • 我建议你使用range(len(L) - 3)而不是切片,我认为OP不知道字符串和字典压缩,所以需要一些解释和演示。
  • @GrijeshChauhan 是的,已修复。我觉得真的没什么好解释的。这是一个扁平循环,与 OP 的部分代码非常相似,我认为它是非常透明的。
【解决方案2】:

您应该使用“=”而不是“.append()”来添加到字典,即

dictionary[key] = value

此外,您可以使用模数 (%) 来确保列表索引不会超过列表的长度。

这个稍加修改的代码有效,包括当 num = 4 或 num = 2 时:

L = ['a','b','c','d','e']
num = 3
a_dict = {}
for i in range(len(L) - num): 
      a_dict[tuple(L[i:(i+num)%len(L)])] = (L[(i+num)%len(L)])

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2021-07-24
    • 2018-04-06
    • 2015-12-28
    相关资源
    最近更新 更多