0

コードの何が問題なのかを理解するのに苦労しています。複数の辞書からキーをランダムに選択し、そのキーをリストの先頭に追加しようとしています。例えば:

import random
list1 = ["list"]
dict1 = {"key1" : "def1", "key2" : "def2", "key3" : "def3"}
dict2 = {"key4" : "def4", "key5" : "def5", "key6" : "def6"}
DICTIONARIES = [dict1, dict2]
value = random.choice(DICTIONARIES)
key = random.choice(list(value.keys()))
list1[:0] = key
print (list1)

私が欲しいのは、[key5, list] の出力結果です。私が得るのは ['k', 'e', 'y', '5', list] です

何か案は?目的の結果を生成するランダム キーを複数の辞書で検索するより良い方法はありますか?

ありがとう。

4

3 に答える 3

2

そのitem変数は と同じだと思いますlist1。はいの場合、これを試してください:

list1[:0] = [key]

または、list.insertスライス割り当ての代わりに関数を使用することもできます。

list1.insert(0, key)

あなたのバージョンは次のように機能していました:

  • 割り当て前: list1 = ['list']key = 'key5'
  • 代入の左側は'list'in の前の要素を参照しますlist1
  • 右側は の値を指しkey、これは"key5"です。
  • "key5"keyおよびのシーケンスです5
  • したがって、シーケンスlist1[:0] = keyを連結します。"key5" list1
  • しかし、シーケンス (「key5」に等しい要素が 1 つしかない) とlist1[:0] = [key]を連結します。そして、それが私たちが実際に望んでいることです。[key]list1
于 2013-04-28T10:21:18.233 に答える
2

このようなもの:

import random
list1 = ["list"]
dict1 = {"key1" : "def1", "key2" : "def2", "key3" : "def3"}
dict2 = {"key4" : "def4", "key5" : "def5", "key6" : "def6"}

all_keys = list(dict1.keys() | dict2.keys())  #creates a list containing all keys
key = random.choice(all_keys)
list1.insert(0,key) 
print (list1)          #prints  ['key1', 'list']
于 2013-04-28T10:24:32.597 に答える
1

Pythonstringオブジェクトはイテラブルなので、この行は

list1[:0] = key

この

list1[:0] = list(key)

は等しく、 の0 番目の位置から 0 番目の位置までのすべての要素を の要素で置き換えることを意味list1keyます。関数を使用insertするか、要素でリストを作成してkey割り当てます。

于 2013-04-28T10:39:40.937 に答える