【问题标题】:setting multiple keys/values into a dictionary (python 2.72)将多个键/值设置为字典(python 2.72)
【发布时间】:2011-11-26 14:09:33
【问题描述】:

我有一个字符串列表。我愿意创建一个字典,它的键是列表中的所有字符串(当然每个字符串都是一个键)。

现在是值:与每个键对应的值将是列表中键字符串之后的字符串。值将来自列表类型。

备注:最后一个单词不会被收录到字典中。 一个键不会在 dic 上出现两次。如果某个键有多个值,它们将被添加到键的现有值列表中。 顺序无关紧要(字典可以不排序,如果它使工作更容易)。

例子:

  • 对于列表:

    List = ['today','is','worm','and','dry']
    
  • 字典将是:

    Dic={'today': ['is'], 'is': ['worm'],'worm': ['and'], 'and':['dry']}
    

谢谢,

【问题讨论】:

    标签: python list dictionary key


    【解决方案1】:
    l = ['today','is','worm','and','dry']
    
    d = {}
    for w1, w2 in zip(l, l[1:]):
        d.setdefault(w1, []).append(w2)
    
    # d == {'and': ['dry'], 'is': ['worm'], 'today': ['is'], 'worm': ['and']}
    

    【讨论】:

    • 其实我相信d = dict((w1, [w2]) for w1, w2 in zip(l, l[1:]))就足够了,因为它会将{'and': ['dry'], 'is': ['worm'], 'worm': ['and'], 'today': ['is']}分配给d
    • @Tadeck - 它适用于这种情况,但如果您无法为其分配更多项目,则该列表没有任何意义。
    • 你错了,字典是可编辑的以及其中的每个列表都是可编辑的。你可以例如。做d['and'].append('something') 和你的d 将等于{'and': ['dry', 'something'], 'is': ['worm'], 'worm': ['and'], 'today': ['is']}。如果我使用元组会有所不同,但我没有。我真的不遵循你的推理 - 我的代码更短,解决了问题并做了你说它不能做的事情。请澄清。
    【解决方案2】:

    不是很好,但它正在工作

    >>> List = ['today','is','worm','and','dry']
    >>> Dic ={}
    >>> key = None
    >>> for item in List:
    ...     if key:
    ...         Dic.update({key:item})
    ...     key=item
    ... 
    >>> Dic
    {'and': 'dry', 'is': 'worm', 'worm': 'and', 'today': 'is'}
    >>> 
    

    【讨论】:

      【解决方案3】:

      (基于@eumiro 的回答)

      >>> l = ['today','is','worm','and','dry']
      >>> print dict(zip(l, l[1:]))
      {'and': 'dry', 'is': 'worm', 'worm': 'and', 'today': 'is'}
      >>> print dict(zip(l, l[1:] + [None]))
      {'and': 'dry', 'dry': None, 'is': 'worm', 'worm': 'and', 'today': 'is'}
      >>> print dict((k, [v]) for (k, v) in zip(l, l[1:] + [None]))
      {'and': ['dry'], 'dry': [None], 'is': ['worm'], 'worm': ['and'], 'today': ['is']}
      

      【讨论】:

        【解决方案4】:

        试试这个:

        lst = ['today','is','worm','and','dry']
        dic = {}
        
        for k in xrange(len(lst) - 1):
            dic[lst[k]] = [lst[k+1]]
        

        这是一个有效的答案,因为它不会创建任何额外的列表来构建字典。您可以检查结果,这是预期的结果:

        dic == {'today': ['is'], 'is': ['worm'],'worm': ['and'], 'and':['dry']}
        > True
        

        【讨论】:

          【解决方案5】:

          可以通过以下代码实现:

          Dic = dict((key, [item]) for key, item in zip(List, List[1:]))
          

          结果如下:

          >>> Dic
          {'and': ['dry'], 'is': ['worm'], 'worm': ['and'], 'today': ['is']}
          

          如果您需要更高性能的解决方案,可以使用izip()函数

          from itertools import izip
          Dic = dict((key, [item]) for key, item in izip(List, List[1:]))
          

          这将给出相同的结果,但以更有效的方式。

          但请遵循 Python 的命名约定(例如,将变量命名为 my_dictmy_list,但最好给它们更有意义的名称)并且不要覆盖 listdict关键字(如果你想给你的变量起这样的名字)。

          【讨论】:

            猜你喜欢
            • 2018-07-28
            • 2021-10-07
            • 2020-05-12
            • 1970-01-01
            • 1970-01-01
            • 2022-07-05
            • 2015-10-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多