2013-04-28 6 views
0

Я изо всех сил пытаюсь выяснить, что не так с моим кодом. Я пытаюсь случайным образом выбрать ключ из нескольких словарей, а затем добавить этот ключ в начало списка. Например:Добавление случайного ключа из словаря в список в python 3.3

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]

Любые идеи? есть ли лучший способ поиска нескольких словарей для случайного ключа, который даст желаемые результаты?

Спасибо.

ответ

2

Я полагаю, что переменная item такая же, как list1. Если да, то попробуйте следующее:

list1[:0] = [key] 

Или, в качестве альтернативы вы можете использовать list.insert функцию вместо присваивания среза:

list1.insert(0, key) 

Ваша версия работала как в следующем:

  • Перед назначением : list1 = ['list'], key = 'key5'
  • Левая сторона присвоения относится к элементу до 'list' in list1
  • Правая сторона относится к значению key, которое составляет "key5".
  • "key5" - это последовательность k, e, y и 5.
  • Итак, по list1[:0] = key мы конкатенируем "key5"последовательность и list1.
  • Но в list1[:0] = [key] мы конкатенируем последовательность [key] (которая имеет только один элемент, который равен «key5») и list1. И это то, чего мы действительно хотим.
+0

Да, элемент должен был быть списком1. Извините, работая над слишком большим количеством материала и перепуталась :-) Ваше объяснение было очень полезно, спасибо! – Simkill

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'] 
+0

В Python 3 следует использовать синтаксис 'print()'. – Alexey

+0

Большое спасибо, я буду использовать этот метод в будущем. – Simkill

1

В Python string объекты итерацию, поэтому, эта линия

list1[:0] = key 

и это

list1[:0] = list(key) 

равны, а значит замените все элементы м 0-е место до 0-й позиции в list1 с элементами от key. Вы должны использовать функцию insert или создать список с элементом key и назначить его.

Смежные вопросы