繁体   English   中英

从python中的字典中获取随机键:值对

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM