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'
  • 赋值左侧是指in之前'list'的元素list1
  • 右侧指的是 的值key,即"key5"
  • "key5"k,ey的序列5
  • 所以,通过list1[:0] = key我们连接"key5" 序列list1
  • 但是在list1[:0] = [key]我们连接[key]序列(只有一个元素等于“key5”)和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 位置的所有list1元素key。你应该使用insert函数,或者用key元素制作一个列表并分配它。

于 2013-04-28T10:39:40.937 回答