okihara6
@okihara6 (selecao)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

python3の辞書(dict)の中のlist型の値の更新について。

python3のlist型を含めた辞書の更新で困っています。
辞書内のlistの内容を 0 → 1 に更新する方法はありますか?
一度[10,0]を抜いて[10,1]にして更新もないと思うので。。。

def eigo_red_set(self):

??→ self.eigo_dic[0] = 1

現在 self.eigo_dic0
10,0

目的 self.eigo_dic0
10,1 ←←

0

2Answer

質問の意図を推測するとこういうこと?

class Spam:
    def __init__(self):
        self.eigo_dic = {
            0: [10, 0],
        }

    def eigo_red_set(self, value):
        self.eigo_dic[0][1] = value


spam = Spam()
print(spam.eigo_dic[0])
# >> [10, 0]

spam.eigo_red_set(value=1)
print(spam.eigo_dic[0])
# >> [10, 1]
1Like

Comments

  1. @okihara6

    Questioner

    ありがとうございます。
    出来ました。
    試しに self.eigo_dic[1][0] = 1もして把握しました。

    【データ取得】
    print(self.eigo_dic[0])

    【データ更新】
    self.eigo_dic[0][1] = 1


    dictはデータを取得するときはkeyが必要かと思っています。
    しかし、更新するときはkeyが必要ではないのですね。。
    (eigo_dic[0][0][1]やeigo_dic[0].update?など。)

キーは必要ですね。

元のコードの eigo_dic にどういう値が入っているかわかりませんが、私が書いた例だと、下のような dict を想定しています。

eigo_dic = {
    0: [10, 0, 'a'],
    1: [10, 0, 'b'],
    'X': [10, 0, 'c'],
    'Y': [10, 0, 'd']
}

つまりキーに int を使用している特殊な例なので eigo_dic[0] が配列の添字のように見えますが、 0dict のキーです。上の例ではキーの値が intstr の混在なのでこのようにアクセスできます。

print(eigo_dic[0])
# >> [10, 0, 'a']
print(eigo_dic[0][2])
# >> a
print(eigo_dic['X'])
# >> [10, 0, 'c']
print(eigo_dic['X'][2])
# >> c

eigo_dic[0][2][0]dict のキーであり、 [2] が中の配列の添字です。ですので、更新する際は次ようになります。

eigo_dic[0][2] = 'A'
print(eigo_dic[0])
# >> [10, 0, 'A']
print(eigo_dic[0][2])
# >> A

eigo_dic['X'][2] = 'C'
print(eigo_dic['X'])
# >> [10, 0, 'C']
print(eigo_dic['X'][2])
# >> C

このように更新のならまあキーは不要という表現になるのかもしれませんが

eigo_dic.update({
    0: [10, 0, 'A'],
    'X': [10, 0, 'B'],
})
1Like

Comments

  1. @okihara6

    Questioner

    元のeigo_dicは以下です。
    0: [10, 0]
    1: [20, 0]
    2: [30, 1]←赤点有
    リストは[取得点数,赤点有無]になります。
    Keyが無いので1人目、2人目の人数をKeyに当てました。
    サンプルではKeyに文字列が多いですが。。
    まあ、いいかと思ってます。

    この度は、ありがとうございました。
    またよろしくお願いします。

Your answer might help someone💌