1

以下に示すように、私は辞書を持っています。

band1= {'channel1': 10564, 'channel2': 10589, 'channel3': 10612, 'channel4': 10637,'channel5': 10662, 'channel6': 10687,
'channel7': 10712, 'channel8': 10737, 'channel9': 10762, 'channel10': 10787,'channel11': 10812, 'channel12': 10837, }

この辞書を編集する良い方法が欲しいです。各エントリに別の値を追加したいのは value/5 で、入力した 3 番目の値は value/5-190 です

ディクショナリは次のようになります (式は実際に最終的な値に変換されます)。

band1= {'channel1': [10564, 10564/5, 10564/5-190], 'channel2': [10589,10589/5,10589/5-190], 'channel3': [10612,10612/5,10612/5-190], 'channel4': [10637,10637/5,10637/5-190],
'channel5': [10662,10662/5,10662/5-190], 'channel6': [10687,10687/5,10687/5-190],
'channel7': [10712, 10712/5, 10712/5-190], 'channel8': [10737,10737/5,10737/5-190], 'channel9': [10762,10762/5,10762/5-190], 'channel10': [10787,10787/5,10787/5-190],'channel11': [10812,10812/5,10812/5-190], 'channel12': [10837,10837/5,10837/5-190]}

私はこれを多くのエントリで行う必要があるため、pythonic の方法でそれらを追加できれば、すべてを入力するよりも優れています。また、5 または 190 は他の辞書では可変であるため、これを簡単に変更できると便利です。これも、ハードコーディングしない理由の 1 つです。たとえば、別の辞書には、4 で除算して 2 番目の要素に 200 を追加する必要があるという規則があり、3 番目の要素には別の変数番号を追加する必要がある場合があります。

band2= {'channel1': [10564, 10564/4+200, 10564/4+200+100]
4

3 に答える 3

7

辞書内包表記がそのトリックを行います:

var1 = 5
var2 = -190
{k: [v, v/var1, v/var1+var2] for k, v in band1.iteritems()}

Python 3 の場合.iteritems()は justに置き換え.items()ます。Python 2.6 以前の場合は、ジェネレーター式を使用して (キー、値) タプルを生成します。

dict((k, [v, v/var1, v/var1+var2]) for k, v in band1.iteritems())

2 番目のディクショナリvar1では、 がそれぞれおよびvar2に設定されます。4200

デモ:

>>> {k: [v, v/var1, v/var1+var2] for k, v in band1.iteritems()}
{'channel11': [10812, 2162, 1972], 'channel10': [10787, 2157, 1967], 'channel3': [10612, 2122, 1932], 'channel2': [10589, 2117, 1927], 'channel1': [10564, 2112, 1922], 'channel7': [10712, 2142, 1952], 'channel6': [10687, 2137, 1947], 'channel5': [10662, 2132, 1942], 'channel4': [10637, 2127, 1937], 'channel9': [10762, 2152, 1962], 'channel8': [10737, 2147, 1957], 'channel12': [10837, 2167, 1977]}
于 2013-04-23T15:27:15.983 に答える
0

言及するのが良いと思う他のオプションは、文字列を使用することです:

band2= {'channel1': ['10564', '10564/4+200', '10564/4+200+100']

次に、値を次のように抽出しますeval

>>> eval("10564/4+200")
2841
于 2013-04-23T15:28:16.743 に答える