0

だから私はこのようなスクリプトを持っています

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')

このコードは、値リストの2番目の項目の先頭から哺乳類を効果的に削除します。今、私はこのより良い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

4 に答える 4

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)']}

これを客観的に「見栄えの良い」とは言いませんが、反復法の方が望ましい場合があります。

于 2012-10-22T12:00:13.057 に答える
0

リスト内包表記は新しいリストを作成します

strip()を使用できた場合、Value[1]は文字列です。リストではありません。

ディクショナリメソッドkeys()だけで2番目の部分を実行できます-両方の試みは冗長です。

alist = mydictionary.keys()
于 2012-10-22T11:56:34.300 に答える
0

副作用を作成するためだけにリスト内包表記を使用しないでください。できますが、それは悪い習慣と見なされ、forループに固執する必要があります。

とにかく、あなたは辞書を使っているので、あなたは辞書の理解を探しているかもしれません:

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の理解を使用する場合は、古い辞書の値を置き換える代わりに、新しい辞書を作成することに注意してください。


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

このコードは、値リストの2番目の項目の先頭から哺乳類を効果的に削除します。

いいえ、違います。、、のすべての出現箇所を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()
于 2012-10-22T12:03:56.147 に答える
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']
于 2012-10-22T12:03:59.400 に答える