摘录:Python字典,具有多个值的键

2024-04-23 06:06:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件,我试图从文件1中提取一些值,如下所示:

File1:
2    word1
4    word2
4    word2_1
4    word2_2
8    word5
8    word5_3

File 2:
4
8

我想要的是从文件2中提取以4和8开头的每一行,它们都是很多。 所以通常如果只有一行匹配,我会使用python字典,一个键一个元素容易!但是现在我有多个元素与同一个键匹配,我的脚本只提取最后一个元素(显然,随着它的进行,它将删除之前的元素!)。 所以我知道这不是怎么回事,但我不知道,如果有人能帮我开始,我会很高兴的。在

以下是我的“常用”代码:

^{pr2}$

Tags: 文件代码脚本元素字典file1file我会
2条回答

你考虑过使用^{}吗。您可以将文件加载到DataFrame中,然后对其进行筛选:

In [5]: file1 = pn.read_csv('file1',sep='    ', 
                            names=['number','word'],
                            engine='python')

In [6]: file1
Out[6]: 
   number     word
0       2    word1
1       4    word2
2       4  word2_1
3       4  word2_2
4       8    word5
5       8  word5_3

In [9]: file1[(file1.number==4) | (file1.number==8)]
Out[9]: 
   number     word
1       4    word2
2       4  word2_1
3       4  word2_2
4       8    word5
5       8  word5_3

In [13]: foo = file1[(file1.number==4) | (file1.number==8)].append(file2[(file2.number==4) | (file2.number==8)])
Out[13]: 
   number     word
1       4    word2
2       4  word2_1
3       4  word2_2
4       8    word5
5       8  word5_3
1       4    word2
2       4  word2_1
3       4  word2_2
4       8    word5
5       8  word5_3

在5中是里德文件,在9中是按数字值过滤文件,在13中是将两个过滤后的文件合并在一起。
然后你就可以对它进行排序,并且比用字典计算要容易得多。在

更新
要根据列值在某个列表中的条件筛选pandas.DataFrame,可以使用^{}给出它的列表或使用range。在

^{pr2}$

创建字典、列表的值,并附加到它们后面。在

一般情况下:

from collections import defaultdict
my_dict = defaultdict(lambda: [])

for x in xrange(101):
    if x % 2 == 0:
        my_dict['evens'].append(str(x))
    else:
        my_dict['odds'].append(str(x))

print 'evens:', ' '.join(my_dict['evens'])
print 'odds:', ' '.join(my_dict['odds'])

在您的例子中,您的值是列表,因此将列表添加(连接)到字典的列表中:

^{pr2}$

如果您实际想要打印的是每个基因的计数,那么将"\t".join(count)替换为len(count),即列表的长度。在

相关问题 更多 >