Python List理解转换

时间:2012-10-22 11:45:55

标签: python list-comprehension

所以我有一个像这样的剧本

for key, Value in mydictionary.iteritems():
    if 'Mammal' in Value[1]: 
    #because the value is a list of 2 items and I want to get at the second one
        Value[1] = Value[1].strip('Mammal')

此代码有效地从值列表中第二项的开头删除Mammal。现在我想让这个更好的python看起来有列表理解,所以我想出了这个,但显然是错的......有什么帮助吗?

Value[1] = [Value[1].strip('Mammal') for Key, Value in mydictionary.iteritems() if 'Mammal' in Value[1] ]

此外,在同一行上,列表理解列出了该词典中的所有键。我很难想出那个。

我想出了:

for key, Value in mydictionary.iteritems():
Templist.append(key)

但作为列表理解我正在思考....但它不起作用:(

alist = [key for Key, Value in mydictionary.iteritems()]

4 个答案:

答案 0 :(得分:1)

mydictionary = {
    1: [4, "ABC Mammal"],
    2: [8, "Mammal 123"],
    3: [15, "Bird (Not a Mammal)"]
}

mydictionary = {key: ([value[0], value[1].strip('Mammal')] if 'Mammal' in value[1] else value) for key, value in mydictionary.iteritems()}
print mydictionary

输出:

{1: [4, 'ABC '], 2: [8, ' 123'], 3: [15, 'Bird (Not a Mammal)']}

虽然我不会客观地称之为“更好看”,但迭代方法可能更合适。

答案 1 :(得分:0)

列表理解会创建一个新列表

如果你能够使用 strip(),那么 Value [1] 是一个字符串 - 而不是列表

您可以使用字典方法键()进行第二部分 - 您的尝试都是多余的。

alist = mydictionary.keys()

答案 2 :(得分:0)

您不应仅使用列表推导来创建副作用。你可以,但这被认为是不好的做法,你应该坚持使用for循环。

无论如何,既然您正在使用字典,那么您可能正在寻找dict comprehension

mydictionary = {'foo': ['unknown', 'Mammal is great'],
                'bar': ['something', 'dont touch me']}

mydictionary = {k: [a, b.replace('Mammal', '', 1)] for k, [a, b] in mydictionary.iteritems() if b.startswith('Mammal')}

另请注意,使用dict comprehension时,您可以创建一个新词典,而不是替换旧词典中的值。


...
Value[1] = Value[1].strip('Mammal')
...
  

此代码有效地从值列表中第二项的开头删除了Mammal。

不,它没有。它会从该项的开头和结尾替换所有出现的Maml。最好使用replace方法将第一次出现的Mammal替换为空字符串。


alist = [key for Key, Value in mydictionary.iteritems()]

你这里有一个错字。它应该是:

alist = [key for key, value in mydictionary.iteritems()]

或只是

alist = mydictionary.keys()

答案 3 :(得分:0)

mydict = {'a':['Mammal','BC','CD'],
        'b':['AB','XY','YZ'],
        'c':['Mammal','GG','FD'],}

print [x for x,y in mydict.items() if y[0]=='Mammal']