2013-04-28 67 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',列表]

任何想法?有没有更好的方法来搜索多个词典的随机密钥,将产生预期的结果?

谢谢。

回答

2

我想item变量和list1一样。如果是的话,试试这个:

list1[:0] = [key] 

,或者您可以使用list.insert函数,而不是片分配:

list1.insert(0, key) 

你的版本是工作类似如下:

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

是的项目应该是list1。对不起,工作太多东西,混淆了:-)你的解释是非常有益的,谢谢! – Simkill 2013-04-28 10:46:24

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 2013-04-28 10:25:37

+0

非常感谢,我将来会使用这种方法。 – Simkill 2013-04-28 10:46:45

1

在Python string对象是可迭代,因此,这条线

list1[:0] = key 

list1[:0] = list(key) 

是平等的,并且意味着替换所有元素从key中选择list1中的第0个位置到第0个位置。您应该使用insert函数,或者使用key元素进行列表并分配它。

相关问题