59

私はこれをしたいのですが、辞書の場合:

"My string".lower()

組み込み関数はありますか、それともループを使用する必要がありますか?

4

12 に答える 12

98

ループまたはリスト/ジェネレータ内包表記のいずれかを使用する必要があります。すべてのキーと値を小文字にしたい場合は、これを行うことができます::

dict((k.lower(), v.lower()) for k,v in {'My Key':'My Value'}.iteritems())

キーだけを小文字にしたい場合は、これを行うことができます::

dict((k.lower(), v) for k,v in {'My Key':'My Value'}.iteritems())

ジェネレーター式(上記で使用) は、辞書の作成に役立つことがよくあります。私はいつもそれらを使用しています。メモリ オーバーヘッドのない、ループ内包表記のすべての表現力。

于 2009-04-18T21:31:02.877 に答える
14

以下は Rick Copeland の回答と同じですが、using ジェネレーター式を使用せずに記述しただけです。

outdict = {}
for k, v in {'My Key': 'My Value'}.iteritems():
    outdict[k.lower()] = v.lower()

ジェネレーター式、リスト内包表記、および (Python 2.7 以降では) dict 内包表記は、基本的にループを書き換える方法です。

Python 2.7 以降では、辞書内包表記を使用できます (1 行のコードですが、読みやすくするために再フォーマットできます)。

{k.lower():v.lower()
    for k, v in
    {'My Key': 'My Value'}.items()
}

空の dict/list/etc. を初期化する必要がないため、ループに相当するものよりも整頓されていることがよくあります。

于 2009-04-19T13:25:52.923 に答える
11

Python 3でのより短い方法: {k.lower(): v for k, v in my_dict.items()}

于 2016-07-25T16:17:22.250 に答える
2

提供された辞書に複数のタイプのキー/値 (数値、文字列など) がある場合。次に、次の解決策を使用します。

例えば; 以下に示すような mydict という名前の辞書がある場合

mydict = {"FName":"John","LName":"Doe",007:true}

Python 2.x の場合

dict((k.lower() if isinstance(k, basestring) else k, v.lower() if isinstance(v, basestring) else v) for k,v in mydict.iteritems())

Python 3.x の場合

dict((k.lower() if isinstance(k, str) else k, v.lower() if isinstance(v, str) else v) for k,v in mydict.iteritems())

注:これは 1 次元の辞書でうまく機能します

于 2016-01-22T06:18:25.597 に答える
1

あなたPython 3ができること:

dict((k.lower(), v.lower()) for k,v in {'Key':'Value'}.items())

Python 2代わりに:.items().iteritems()

dict((k.lower(), v.lower()) for k,v in {'Key':'Value'}.iteritems())
于 2019-06-03T12:18:20.613 に答える