簡體   English   中英

用兩個列表中的隨機元素創建字典列表-python

[英]create a list of dictionaries with randomised elements from two lists - python

python中是否有辦法在列表中的兩個列表之間執行隨機化並返回字典?

例如,來自:

[[1,2,3,4], ['a','b','c','d']]

至:

[{3:'a'}, {1:'d'}, {2:'c'}, {4:'b'}]

實現此目標的最佳方法是什么? 使用列表理解? 我的兩個列表實際上很大,所以我想知道是否有更有效的選擇。

import random
keys, values = [[1,2,3,4], ['a','b','c','d']]
random.shuffle(values)
result =  [{k:v} for k, v in zip(keys, values)]

產生一個列表,例如:

In [7]: result
Out[7]: [{1: 'd'}, {2: 'b'}, {3: 'c'}, {4: 'a'}]

內存效率更高的替代方法是使用迭代器:

import itertools as IT
result = ({k:v} for k, v in IT.izip(keys, values))

更大的問題是為什么您想要一系列小命令。 像史蒂文·魯姆巴爾斯基的回答所產生的那樣,做出一則命令會更有用嗎?

或者,如果您確實只想要隨機配對,則元組的迭代器可能就足夠了:

result = IT.izip(keys, values)

這將創建一個字典,而不是您的問題要求的單個項目詞典的列表。 如果您確實需要,請使用unutbu的答案

import random

a = [1,2,3,4]
b = ['a','b','c','d']

random.shuffle(a)
result = dict(zip(a, b))

如果您無法變更來源清單:

dx = range(len(a))
random.shuffle(dx)
dict(zip((a[i] for i in dx), b))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM