将字典中的随机密钥添加到python 3.3中的列表中

时间:2013-04-28 10:17:22

标签: python 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',列表]

有什么想法吗?是否有更好的方法来搜索多个字典的随机密钥,以产生所需的结果?

感谢。

3 个答案:

答案 0 :(得分:2)

我认为item变量与list1相同。如果是,请尝试:

list1[:0] = [key]

或者,您也可以使用list.insert函数代替切片赋值:

list1.insert(0, key)

您的版本的工作方式如下:

  • 转让前:list1 = ['list']key = 'key5'
  • 分配的左侧是指'list'
  • list1之前的元素
  • 右侧是指key的值,即"key5"
  • "key5"是一系列key5
  • 因此,通过list1[:0] = key我们连接"key5" 序列list1
  • 但在list1[:0] = [key]中,我们连接[key]序列(只有一个元素等于“key5”)和list1。这就是我们真正想要的。

答案 1 :(得分: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']

答案 2 :(得分:1)

在Python中string对象是可迭代的,所以,这一行

list1[:0] = key

和这个

list1[:0] = list(key)

是等于,意味着使用list1 中的元素替换key中从第0位到第0位的所有元素。您应该使用insert函数,或者使用key元素创建一个列表并分配它。