[英]Get random key:value pairs from dictionary in python
我试图从我用csv文件制作的字典中提取一组随机的键值对。 字典包含基因信息,基因名称是字典键,数字列表(与基因表达等相关)是值。
# python 2.7.5
import csv
import random
genes_csv = csv.reader(open('genes.csv', 'rb'))
genes_dict = {}
for row in genes_csv:
genes_dict[row[0]] = row[1:]
length = raw_input('How many genes do you want? ')
for key in genes_dict:
random_list = random.sample(genes_dict.items(), int(length))
print random_list
问题是,如果我试图得到100个基因的列表(例如),它似乎迭代整个字典并返回100个基因的每个可能的组合。
如果你想从字典D
获取随机K
元素,你只需使用
import random
random.sample( D.items(), K )
这就是你所需要的。
从Python的文档:
随机。 样本 ( 人口 , k )
返回从总体序列中选择的k长度的唯一元素列表。 用于无需更换的随机抽样。
在你的情况下
import csv
import random
genes_csv = csv.reader(open('genes.csv', 'rb'))
genes_dict = {}
for row in genes_csv:
genes_dict[row[0]] = row[1:]
length = raw_input('How many genes do you want? ')
random_list = random.sample( genes_dict.items(), int(length) )
print random_list
无需遍历字典的所有键
for key in genes_dict:
random_list = random.sample(genes_dict.items(), int(length))
print random_list
注意,你实际上没有使用你的循环中的key
变量,这应该警告你这里可能有问题。 虽然它“返回100个基因的所有可能组合” 并不是真的 ,但它只返回N
随机k
元素基因列表(在你的情况下为100),其中N
是字典的大小,这远非“全部”组合“(即N!/(Nk)!k!
)
for key in genes_dict:
random_list = random.sample(genes_dict.items(), int(length))
print random_list
遍历每个键,每个键打印一个样本。 你正在寻找
random_list = random.sample(genes_dict.items(), int(length))
print random_list
我同意其他人不需要使用字典键进行迭代。 但是,如果您不希望将格式作为元组返回,而是作为列表使用
random_list=genes_dict.keys() int(length)
然后,如果“int(length)”多于一个,则为循环获取值:
for x in random_list:
print x,genes_dict[x]
//or to create a new dict of the random values you could
random_genes_dict[x]=genes_dict[x]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.