Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从由多个列表组成的字典中,从每个列表中选择一个元素_Python_Python 3.x_List_Dictionary_Random - Fatal编程技术网

Python 从由多个列表组成的字典中,从每个列表中选择一个元素

Python 从由多个列表组成的字典中,从每个列表中选择一个元素,python,python-3.x,list,dictionary,random,Python,Python 3.x,List,Dictionary,Random,假设我有一本这样的列表词典: lists= {'pet': ["dog", "cat", "parrot"], 'amount': [1,2,3], 'food': ["canned", "dry"]} {'amount': 2, 'food': 'canned', 'pet': 'cat'} 我想从每个列表中随机选取一个元素,结果如下: lists= {'pe

假设我有一本这样的列表词典:

lists= {'pet': ["dog", "cat", "parrot"],
        'amount': [1,2,3],
        'food': ["canned", "dry"]}
{'amount': 2, 'food': 'canned', 'pet': 'cat'}
我想从每个列表中随机选取一个元素,结果如下:

lists= {'pet': ["dog", "cat", "parrot"],
        'amount': [1,2,3],
        'food': ["canned", "dry"]}
{'amount': 2, 'food': 'canned', 'pet': 'cat'}
使用Python实现它的最简单方法是什么?

您尝试过吗


或者,如果要就地更新
列表
,请使用

for k, v in lists.items():
    lists[k] = choice(v)

lists
# {'pet': 'parrot', 'amount': 3, 'food': 'canned'}

或者,如果您的python版本支持有序内置词典(>=cpython3.6,>=python3.7),您可以尝试使用
map
作为功能替代:

dict(zip(lists, map(choice, lists.values())))
# {'pet': 'parrot', 'amount': 2, 'food': 'dry'}
就我个人而言,我喜欢前两个选项。

你试过了吗


或者,如果要就地更新
列表
,请使用

for k, v in lists.items():
    lists[k] = choice(v)

lists
# {'pet': 'parrot', 'amount': 3, 'food': 'canned'}

或者,如果您的python版本支持有序内置词典(>=cpython3.6,>=python3.7),您可以尝试使用
map
作为功能替代:

dict(zip(lists, map(choice, lists.values())))
# {'pet': 'parrot', 'amount': 2, 'food': 'dry'}

就我个人而言,我喜欢前两个选项。

使用随机模块,遍历字典,然后从每个值中选择一个随机元素?使用随机模块,遍历字典,然后从每个值中选择一个随机元素?~~对于第一个示例,
{k:choice(v)for k,v in list.items()}
可能会更干净一些。~~快点编辑!很好。第一个解决方案很完美,因为我希望能够生成多个结果,而不是修改列表。@acushner是的,很好,谢谢。我认为我以前的解决方案只有在列表很大并且我们不想使用.items()生成额外视图的情况下才更可取,但是这更干净,是的。额外视图有多大?我一直认为它只是一个迭代器……实际上,我会做一些研究,看看是否有什么有趣的东西。~~对于第一个例子,
{k:choice(v)for k,v in list.items()}
可能会更干净一些。~~快编辑!很好。第一个解决方案很完美,因为我希望能够生成多个结果,而不是修改列表。@acushner是的,很好,谢谢。我认为我以前的解决方案只有在列表很大并且我们不想使用.items()生成额外视图的情况下才更可取,但是这更干净,是的。额外视图有多大?我一直以为它只是一个迭代器…实际上,我会做一些研究,看看我是否发现了什么有趣的东西。