Python 单行条件赋值if语句
这是我在这个论坛上要问的第一个问题,所以我欢迎你的反馈,让这对其他人更有帮助 假设我有这个清单:Python 单行条件赋值if语句,python,for-loop,if-statement,for-in-loop,Python,For Loop,If Statement,For In Loop,这是我在这个论坛上要问的第一个问题,所以我欢迎你的反馈,让这对其他人更有帮助 假设我有这个清单: IDs = ['First', 'Second', 'Third'] 这本字典: statistics = {('First', 'Name'):"FirstName", ('Second','Name'):"SecondName", ('Third','Name'):"ThirdName"} 有没有比下面一行更简短、更容易阅读的行文 firstID = IDs[[statistics[ID,'
IDs = ['First', 'Second', 'Third']
这本字典:
statistics = {('First', 'Name'):"FirstName", ('Second','Name'):"SecondName", ('Third','Name'):"ThirdName"}
有没有比下面一行更简短、更容易阅读的行文
firstID = IDs[[statistics[ID,'Name'] for ID in IDs].index('FirstName')]
非常感谢一种更有效(可能更可读)的方法是:
firstID = next(id for id in IDs if statistics[(id,'Name')]=='FirstName')
这定义了一个函数,它按顺序检查ID
,并从统计数据中生成等于FirstName
的值。用于从此迭代器检索第一个值。如果没有找到匹配的名称,这将引发StopIteration
# If you ever plan to change the order of IDs:
firstID = IDs[IDs.index('First')]
# If you are literally just looking for the first ID in IDs:
firstID = IDs[0]
如果您在这两行中查看代码:
IDs = ['First', 'Second', 'Third']
firstID = IDs[[statistics[ID,'Name'] for ID in IDs].index('FirstName')]
新创建的列表中'FirstName'
的索引将始终等于IDs
中'First'
的索引。由于您的列表理解将按顺序迭代IDs
,并将相应的dict
值按该顺序排列,因此您将始终在IDs
中出现的'First'
索引处创建'FirstName'
。因此,使用上述方法之一从列表中调用它要有效得多。@Jean-Françoisfare:在我看来,只要你读了这一行的其余部分就行了。虽然不是很有效的设计,但我认为它是不正确的!有什么特别的原因让你的dict朝这个方向,而不是切换键和值?如果你需要在两个方向上查找,你是否考虑过制作第二个反向dict?你想做什么?我不明白你的目的……为什么会这样?谢谢你,这正是我想要的!谢谢,但我只是想通过使用元素的名称('FirstName')来搜索元素的ID('First')