8

私はタプルを持っています。('key1', 'value1')それを辞書に追加したいので、のようですが、のようなことはして{'key1': 'value1'}いませんdictionary[t[0]] = t[1]

コンテキストは次のとおりです。次のような繰り返しルールがあります。

FREQ=WEEKLY;UNTIL=20120620T233000Z;INTERVAL=2;BYDAY=WE,TH

そして、私は次のような口述をしたい:

recurrence = {
    'freq' : 'weekly',
    'until' : '20120620T233000Z',
    'interval' : '2',
    'byday' : 'we,th'
}

そして、私はこのようなことをしています:

for rule in recurrence.split(';'):
    r = rule.split('=')
    rules[r[0]] = r[1]

そして、私はそれがまったく好きではありません。それを行うためのよりpythonicな方法はありますか?

4

3 に答える 3

6

理解を使用します。

rules.update(rule.split('=', 1) for rule in recurrence.split(';'))

これは、dictrulesが既に存在する場合です。それ以外の場合は使用

rules = dict(rule.split('=', 1) for rule in recurrence.split(';'))

これが機能するのは、dictコンストラクターとdict.update両方が、キーと値のペアを生成するイテレーターを受け入れるためです。

于 2012-06-12T16:21:59.337 に答える
1

辞書理解を使用します。

>>> strs="FREQ=WEEKLY;UNTIL=20120620T233000Z;INTERVAL=2;BYDAY=WE,TH"
>>> dic={key: value for key, value in (rule.split("=") for rule in strs.split(";"))}
>>> print(dic)

{'BYDAY': 'WE,TH', 'FREQ': 'WEEKLY', 'INTERVAL': '2', 'UNTIL': '20120620T233000Z'}
于 2012-06-12T16:21:45.093 に答える
1

このdict関数は、タプルのタプルを key: value ディクショナリに変換します。これはどう、

t=((1,2),(3,4))
dict(t)
{1:2,3:4}
于 2012-06-12T16:20:43.893 に答える