2017-05-09 3 views
1

私は挿入を行い、スライスを取るディクテーションの理解を構築しようとしています。
誰かがこれを行う方法を知っていますか、またはこれはまったく可能ですか?
newdのforループを使用して、同じ出力をcprdで取得しようとしています。リストとスライスを単一のディクテーションの中に挿入する

コード(Pythonの3.6.1)

# Initializations 
hline = "-"*80 
h = ['H1', 'H2', 'H3', 'H4'] 
d = {'A': [['Y1', 'Y2', 'Y3', 'Y4'], [-3.4, 15.9, 'NA', 6.0], [-3.4, 4.2, -7.4, 6.3], [22.7, 7.4, 2.8, 'NA']], 'B': [['Y1', 'Y2', 'Y3', 'Y4'], [-45.8, -10.7, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']], 'C': [['Y1', 'Y2', 'Y3', 'Y4'], [-10.5, 32.8, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']]} 
print(f"h = {h}") 
print(f"d = {d}") 
print(hline) 

# Without dict/list comprehension 
newd = {} 
for key,value in d.items(): 
    value.insert(1,h) 
    newd[key] = value[1:] 
print(f"newd = {newd}") 
print(hline) 

# Re-Initializations 
d = {'A': [['Y1', 'Y2', 'Y3', 'Y4'], [-3.4, 15.9, 'NA', 6.0], [-3.4, 4.2, -7.4, 6.3], [22.7, 7.4, 2.8, 'NA']], 'B': [['Y1', 'Y2', 'Y3', 'Y4'], [-45.8, -10.7, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']], 'C': [['Y1', 'Y2', 'Y3', 'Y4'], [-10.5, 32.8, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']]} 

# Tryout with dict comprehension 
cprd = {key:value[1:] for key,value in d.items()} 
print(f"cprd = {cprd}") 
print(hline) 

あなたが希望する値を作成するためにlist concatenationを使用することができ、出力

h = ['H1', 'H2', 'H3', 'H4'] 
d = {'A': [['Y1', 'Y2', 'Y3', 'Y4'], [-3.4, 15.9, 'NA', 6.0], [-3.4, 4.2, -7.4, 6.3], [22.7, 7.4, 2.8, 'NA']], 'B': [['Y1', 'Y2', 'Y3', 'Y4'], [-45.8, -10.7, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']], 'C': [['Y1', 'Y2', 'Y3', 'Y4'], [-10.5, 32.8, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']]} 
-------------------------------------------------------------------------------- 
newd = {'A': [['H1', 'H2', 'H3', 'H4'], [-3.4, 15.9, 'NA', 6.0], [-3.4, 4.2, -7.4, 6.3], [22.7, 7.4, 2.8, 'NA']], 'B': [['H1', 'H2', 'H3', 'H4'], [-45.8, -10.7, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']], 'C': [['H1', 'H2', 'H3', 'H4'], [-10.5, 32.8, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']]} 
-------------------------------------------------------------------------------- 
cprd = {'A': [[-3.4, 15.9, 'NA', 6.0], [-3.4, 4.2, -7.4, 6.3], [22.7, 7.4, 2.8, 'NA']], 'B': [[-45.8, -10.7, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']], 'C': [[-10.5, 32.8, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']]} 
-------------------------------------------------------------------------------- 

答えて

3

:という

{key:[h]+value[1:] for key,value in d.items()} 
# {'A': [['H1', 'H2', 'H3', 'H4'], [-3.4, 15.9, 'NA', 6.0], [-3.4, 4.2, -7.4, 6.3], [22.7, 7.4, 2.8, 'NA']], 'B': [['H1', 'H2', 'H3', 'H4'], [-45.8, -10.7, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']], 'C': [['H1', 'H2', 'H3', 'H4'], [-10.5, 32.8, 'NA', 'NA'], [5.4, 12.7, 19.2, 20.3], [22.7, 7.4, 2.8, 'NA']]} 

注:

  • それはあなたの例ではd

を変異ないnewd

  • とまったく同じデータを返し、dnewdを定義した後に変更しました。バグか機能ですか? :)

  • +1

    それはソース辞書が突然変異しているはずであるかどうかによって決まります...私は言うことができませんか?私は願っていませんか? – mwchase

    +0

    突然変異*がd.values()の意図的なものであれば、vのために:v [0] = hは挿入/スライスの代わりに行く方法です。 –

    +0

    ソースdictは突然変異しているとは考えられませんが、だからこれは完璧な解決策です:)あなたが「バグですか、機能なのですか?質問。 –

    関連する問題