【问题标题】:append lists in dictionary depending on another list python?根据另一个列表python在字典中附加列表?
【发布时间】:2015-02-08 13:15:43
【问题描述】:

我有一本像这样的字典,其值为空列表

e = {'joe': [], 'craig': [], 'will' : []}

然后有了下面这个列表,我想把名字的顺序添加到字典里面对应键的列表中

['craig', 'joe', 'will']

所以预期的输出是

{'joe': [2], 'craig': [1], 'will' : [3]}

克雷格第一,乔第二,威尔第三

【问题讨论】:

  • 请不要脱离答案的上下文编辑(破坏)您的问题...
  • 由于内容质量低,您被阻止提问。不要通过破坏您的问题来使情况变得更糟。

标签: python python-2.7 python-3.x dictionary append


【解决方案1】:

您需要的是list.index()。请参阅文档here

e = {'joe': [], 'craig': [], 'will' : []}
names = ['craig', 'joe', 'will']

e['joe'] = names.index('joe')+1

注意 1. 如果要遍历列表中的所有名称,可以使用 for name in names

注意 2. 如果您的列表中有一个名字在字典中没有作为关键字找到,您会怎么做?

注意 3. 如果相同的名字在您的列表中出现多次,您会怎么做?

注意 4. 您确定要序列化您的列表从一 (1, 2, 3...) 开始计数,而不是像 Python 那样从零开始计数吗? (0, 1, 2...)。

【讨论】:

  • names.index 如果names 是一个大列表,可能会相对较慢
  • @gnibbler:你说得对。在这样一个基本的问题中,我更愿意发现python列表的一种重要方法,而不是提供可复制粘贴的优化代码。
【解决方案2】:

你可以使用dict.update:

d = {'joe': [], 'craig': [], 'will' : []}
n = ['craig', 'joe', 'will']
d.update((k, d[k] + [i]) for i, k in enumerate(n, 1))
# {'craig': [1], 'will': [3], 'joe': [2]}

【讨论】:

    【解决方案3】:
    e = {'joe': [], 'craig': [], 'will' : []}
    l = ['craig', 'joe', 'will']
    for i,v in enumerate(l, 1):
        e[v].append(i)
    
    print e
    
    >>> 
    {'will': [3], 'craig': [1], 'joe': [2]}
    

    【讨论】:

      【解决方案4】:

      也许你可以使用枚举? 我将假设您已将 e 初始化为空名称字典。 namelist 是按您想要的顺序排列的名称列表。

      for name in e.keys:
        e[name].append(namelist.index[name])
      

      【讨论】:

        【解决方案5】:

        你可以使用enumerate函数:

        >>> e = {'joe': [], 'craig': [], 'will' : []}
        >>> for i,j in enumerate(['craig', 'joe', 'will']):
        ...   e[j].append(i+1)
        ...
        >>> e
        {'will': [3], 'craig': [1], 'joe': [2]}
        

        或者列表的index method

        >>> e = {'joe': [], 'craig': [], 'will' : []}
        >>> l = ['craig', 'joe', 'will']
        >>> for i in l:
        ...   e[i].append(l.index(i)+1)
        ...
        >>> e
        {'will': [3], 'craig': [1], 'joe': [2]}
        

        【讨论】:

          【解决方案6】:
          e = {'joe': [], 'craig': [], 'will' : []}
          for i, key in enumerate(['craig', 'joe', 'will'], 1):
              e[key].append(i)
          
          print e
          

          {'will': [3], 'craig': [1], 'joe': [2]}
          

          【讨论】:

          • 如果我想使用另一个列表添加第二个值会是一样的吗?
          • @Codees,是的,每个键最终都会与一个整数列表相关联
          猜你喜欢
          • 2018-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-08
          • 2020-02-18
          • 1970-01-01
          相关资源
          最近更新 更多