【问题标题】:What is 'name['name'] for name in names[:-1]' in pythonpython中name [:-1]中的名称的'name ['name']是什么
【发布时间】:2018-06-03 09:48:21
【问题描述】:
def namelist(names):
    if len(names) > 1:
        return '{} & {}'.format(', '.join(name['name'] for name in names[:-1]),names[-1]['name'])
    elif names:
        return names[0]['name']
    else:
        return ''

这是连接包含正确标点符号名称的字典的代码。我需要一些帮助来理解它。我无法理解以下部分的含义:

name['name'] for name in names[:-1]

name['name'] 是做什么的?

【问题讨论】:

  • 假设names 是一个字典列表?
  • 如果names 是字典,则此代码不起作用,因为您不能使用names[:-1]
  • @Ollie, names 可能是listdicts。不是字典。

标签: python


【解决方案1】:

从这个例子开始:

names = [{'name': 'Peter'}, {'name': 'Frank'}, {'name': 'Alice'}]

names[:-1] 是一个列表,包含names 的所有元素,没有最后一个:

>>> names[:-1]
[{'name': 'Peter'}, {'name': 'Frank'}]

在您的代码中,name 是列表 names 的一个元素,该列表是一个字典。 name['name'] 返回键 name 的值。

(name['name'] for name in names[:-1]) 是一个生成器,它生成列表names 中名为name 的字典的每个name 属性,但没有最后一项:

>>> list(name['name'] for name in names[:-1])
['Peter', 'Frank']

那么,', '.join(name['name'] for name in names[:-1]) 是没有最后一个的所有名称的列表,用逗号分隔。

>>> ', '.join(name['name'] for name in names[:-1])
'Peter, Frank'

函数namelist格式化人员列表:

>>> namelist(names)
'Peter, Frank & Alice'

【讨论】:

    【解决方案2】:

    看一个例子可能会有所帮助。想象一下names是这样的:

    names = [
        {'age': 20, 'name': 'steve'},
        {'age': 17, 'name': 'alice'},
        {'age': 18, 'name': 'suzy'},
    ]
    

    那么names[:-1]排除最后一项:

    print(last_missing[:-1])
    # prints: [{'age': 20, 'name': 'steve'}, {'age': 17, 'name': 'alice'},]
    

    然后[name['name'] for name in names[:-1]] 只选择字典中的'name' 条目:

    print([name['name'] for name in names[:-1]])
    # prints ['steve', 'alice']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多