我有一些Python代码,它从字典中返回两个随机密钥。
key1,key2 = random.sample(stories.keys(), 2)
问题是,字典stories
还包含列表对象,我希望变量key1
和key2
只包含字符串,而不是列表。
stories
字典包含一堆列表。但是那些列表也可以包含列表。所以它看起来像这样:
{ "thing1": [
"Some text",
"Other text"
],
"thing2": [
"Some numbers",
"How about those 2?"
],
"thing3": {
"Something else": [
"More stuff",
"Even more stuff"
]
},
"thing4": [
"Even more data",
"Yep, more data"
]
}
那么如何在thing1
,thing2
,thing3
和thing4
之间选择两个密钥,但却不能获得Something else
?
修改:为了澄清,我试图选择不包含列表的密钥。所以我只想在thing1
,thing2
,thing4
中选择,而忽略thing3
。
我已经更新了数据示例以使事情更加清晰。
答案 0 :(得分:1)
您可以过滤掉不需要的条目,如下所示:
dict((k,d[k]) for k in d if type(d[k]) == list and all(type(x) == str for x in d[k]))
或者,更好的是:
dict((k,d[k]) for k in d if isinstance(d[k],list) and all(isinstance(x,str) for x in d[k]))
答案 1 :(得分:0)
如果我理解正确,我认为你只想要单级列表,而不是嵌套列表。
您可以在生成这样的随机密钥时进行检查
if (stories[key][0] && isinstance(stories[key][0], list)):
#get the next random key
答案 2 :(得分:0)
您的意思是从thing1
和thing2
指向的字符串列表中选择密钥吗?也许这会让你更接近:
key_strings = (s for kv in stories.items() if isinstance(kv[1],list) for s in kv[1])
print(list(key_strings))
打印:
['Some numbers', 'How about those 2?', 'Some text', 'Other text']