【问题标题】:iterate inside a dictionary comprehension statement在字典理解语句中迭代
【发布时间】:2015-12-31 07:01:35
【问题描述】:

我最近开始学习 python,所以我确信很多我不知道的事情可能很容易解决。但是,搜索了很多问题,我找不到这个问题的答案。

是否可以在字典理解语句中迭代变量?

在寻找答案时,我发现了这个:

{ _key : _value(_key) for _key in _container }

我现在知道,Wich 是一种在推导式中循环的方式,但要让这对我有用,我需要能够迭代 '_container' 中每个 '_key' 的值。

举一个非常基本的例子:

alphabet = 'abcdefghijklmnopqrstuvwxyz'

x = 1

alpha_numbers = {char : x for char in alphabet}

我希望 'alphabet' 容器中的每个 'char' 的 'x' 为 'x += 1'。但是我尝试在字典理解中迭代它的每一种方式都会返回一个“无效语法”错误。

那么,有可能吗?还是有更好的方法?

提前致谢。

【问题讨论】:

    标签: python dictionary dictionary-comprehension


    【解决方案1】:

    您可以使用dictenumeratepassing x 作为起始值:

    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    
    dct = dict(enumerate(alpahbet, x)) # start=x i.e 1
    

    演示:

    In [43]: print dict(enumerate(alphabet,1))
    {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i', 10: 'j', 11: 'k', 12: 'l', 13: 'm', 14: 'n', 15: 'o', 16: 'p', 17: 'q', 18: 'r', 19: 's', 20: 't', 21: 'u', 22: 'v', 23: 'w', 24: 'x', 25: 'y', 26: 'z'}
    

    或者使用带有 dict comp 的 enumerate:

     dct = {i:k for i,k in enumerate(alphabet,x)}
    

    要将字母作为键颠倒 i 和 k 的顺序:

    dct = {k:i for i,k in enumerate(alphabet,x)}
    

    或将itertools.countdictzip 一起使用:

    from itertools import count
    dct = dict(zip(alphabet, count(x)))
    

    或者rangelenzip

     dct = dict(zip(alphabet, range(x, len(alphabet)+x)))
    

    【讨论】:

    • 但是@Padraic 在这种情况下,键是数字,我需要相反的。但无论如何,谢谢,我不知道“.enumerate()”模块。
    • @hBler,然后是{k:i for i,k in enumerate(alphabet,x)},你可以放任何你想要的顺序
    【解决方案2】:

    对于这种情况,尤其要考虑使用索引: {alphabet[i]:i+1 for i in range(len(alphabet))}.

    也就是说,您不能更新列表、集合或字典理解中的变量。如果您想这样做,请使用普通的 for 循环或 while 循环和 dictionary[key] = value 在该循环中添加。

    【讨论】:

      猜你喜欢
      • 2013-08-21
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      相关资源
      最近更新 更多