所以我有一个像这样的剧本
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()]
答案 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。
不,它没有。它会从该项的开头和结尾替换所有出现的M
,a
,m
和l
。最好使用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']