Tim*_*art 4 python csv random dictionary
我试图从我用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
Run Code Online (Sandbox Code Playgroud)
问题是,如果我试图得到100个基因的列表(例如),它似乎迭代整个字典并返回100个基因的每个可能的组合.
lej*_*lot 14
如果你想K从字典中获取随机元素,D你只需使用
import random
random.sample( D.items(), K )
Run Code Online (Sandbox Code Playgroud)
这就是你所需要的.
从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
Run Code Online (Sandbox Code Playgroud)
无需遍历字典的所有键
for key in genes_dict:
random_list = random.sample(genes_dict.items(), int(length))
print random_list
Run Code Online (Sandbox Code Playgroud)
注意,你实际上没有使用key你的循环中的变量,这应该警告你这里可能有问题.虽然它"返回100个基因的所有可能组合" 并不是真的,但它只返回N随机k元素基因列表(在你的情况下为100),N字典的大小,这远不是"所有组合"(这是N!/(N-k)!k!)