Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列表压缩转换_Python_List Comprehension - Fatal编程技术网

Python列表压缩转换

Python列表压缩转换,python,list-comprehension,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') 此代码有效地从值列表中第二项的开头删除哺乳动物。现在我想通过列表理解使这个py

所以我有一个这样的脚本

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')
此代码有效地从值列表中第二项的开头删除哺乳动物。现在我想通过列表理解使这个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)
但作为一个列表理解,我在想……但它不起作用:(


列表理解创建一个新列表

如果能够使用strip(),则值[1]是一个字符串,而不是列表

您可以只使用dictionary方法键()完成第二部分-这两种尝试都是多余的

alist = mydictionary.keys()
alist = mydictionary.keys()
输出:

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

虽然我不会客观地称之为“好看”,所以迭代法可能更可取。

你不应该仅仅使用列表理解来产生副作用。你可以,但这被认为是不好的做法,你应该坚持使用
for
循环

无论如何,由于您正在使用字典,您可能正在寻找:

还请注意,如果使用dict comprehension,则创建一个新词典,而不是替换旧词典中的值


此代码有效地从值列表中第二项的开头删除哺乳动物

不,它不会。它将替换该项开头和结尾出现的所有
M
a
M
l
。最好使用
replace
方法将第一次出现的
哺乳动物
替换为空字符串


这里有一个输入错误。应该是:

alist = [key for key, value in mydictionary.iteritems()]
或者只是


我建议不要使用CamelCase变量名并坚持使用PEP8…为什么不简单地使用
iterkeys
方法呢?实际上,在字典上迭代会在其键上迭代。要获得键列表,不需要列表理解。使用
myDict.keys()
你真的明白你想做什么吗?如果“此代码有效地将哺乳动物从值列表中第二项的开头删除。”,而
列表是字典中的一个值,为什么您需要在此处理解列表?oO
s.strip(“哺乳动物”)
不会做您认为它会做的事情。例如,
Malamman.strip(“哺乳动物”)==“n“
,这样您就可以去掉比您想要的更多的字符。您是对的,Value[1]是一个字符串,在一个名为Value的列表中。但我想我从来没有说过Value[1]是一个列表。你实际上是在创建一个新的字典-这似乎是一个浪费的方法。这很有效!!非常感谢!我同意你的观点,迭代的方法,尤其是对于像我这样的新手来说,在我脑子里运行代码时,至少更容易理解。但是我必须学会这一点,所以谢谢!是的,它确实创建了一个新的字典。它的至少就这一点而言,操作方式对记忆的影响更大。但除非有一种方法可以在不创建新列表的情况下做到这一点,否则这是我所需要的。如何从循环中进行列表理解(我猜是字典理解)。@PierreGM很高兴在单词
typo
:-)中有一个拼写错误“因为如果你的字符串不包含哺乳动物,就不会发生任何事情。”这不是真的--
.strip()
会删除给定的字符,而不是给定的字符串。这会更新我的原始字典,而不创建新字典,而且也可以工作;特别是如果你不想保留旧字典(为什么?…我想是逐案).非常感谢!
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')}
...
Value[1] = Value[1].strip('Mammal')
...
alist = [key for Key, Value in mydictionary.iteritems()]
alist = [key for key, value in mydictionary.iteritems()]
alist = mydictionary.keys()
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']