python 字典循环查找特定字段赋值

nikitazhaohy 发布于 2016/05/25 12:20
阅读 539
收藏 0
# -*- coding:utf-8 -*-
#最近在自学过程中有一道题不会做了:
#源代码如下,对应代码有相应的注释:

handle = open('mbox-short.txt') #打开指定文档
text = handle.read() #读取文档
words = text.split() #切分文档

for line in words :
    if line == '' : continue
    words = line.split()
    if words[0] != 'From': continue
    words = words[1]
    #以上为循环查找文档中以From开头的句段,然后提取句段中第2个位置的元素。

cou = dict()
for wrd in words:
    cou[wrd] = cou.get(wrd,0) + 1
#我的本意是想将上面循环提取到的元素放进空白字典中,但是我知道怎么写,求指教!!!这样写肯定是不能将循环查找的内容添加进字典里的

maxval = None
maxkee = None
for kee,val in cou.items():
    if maxval == None or maxval < val:
        maxval = val
        maxkee = kee
print maxkee,maxval
#上面是查找字典里重复数量最多的元组,由于我不知道怎么将循环查找到的东西放到空字典里,这段输出的肯定是None
最终如果代码正确,应该输出 cwen@iupui.edu 5

请各位大神赐教啊,自己搞了三四天了都搞不定啊,要疯了!!

代码放在代码块里了,代码需要打开的文件放在题目下方的超链接中。

原题题目:

需要的文档链接http://www.pythonlearn.com/code/mbox-short.txt




加载中
0
nikitazhaohy
nikitazhaohy

引用来自“fromdtor”的评论

# -*- coding:utf-8 -*-
fp = open('mbox-short.txt')
lines = fp.readlines()

cou = dict()
for line in lines:
    if line.startswith('From'):
        contact = line.split()[1]
        cou[contact] = cou.get(contact, 0) + 1

maxval = 0
maxkee = ''
for k, v in cou.items():
    if maxval < v:
        maxval = v
        maxkee = k

print maxkee, maxval



好像最后得到的输出不太对,正确的应该是cwen@iupui.edu 5
您给出的代码是最后输出是cwen@iupui.edu 10。
如果其中一段代码改成:
for line in fp:
    line = line.rstrip()
    if line == '' : continue
    words = line.split()
    if words[0] != 'From': continue
    if line.startswith('From'):
        contact = line.split()[1]
        cou[contact] = cou.get(contact, 0) + 1
最后的结果就是跟要求的一致了。
非常感谢您的解答,谢谢!!
2
fromdtor
fromdtor
# -*- coding:utf-8 -*-
fp = open('mbox-short.txt')
lines = fp.readlines()

cou = dict()
for line in lines:
    if line.startswith('From'):
        contact = line.split()[1]
        cou[contact] = cou.get(contact, 0) + 1

maxval = 0
maxkee = ''
for k, v in cou.items():
    if maxval < v:
        maxval = v
        maxkee = k

print maxkee, maxval



1
毒奶黄旭东
毒奶黄旭东

代码放到代码块里。

上传需要处的文件。

给出原题题目。

nikitazhaohy
nikitazhaohy
已修改,烦请帮忙看一下
0
bnysky
bnysky
# -*- coding:utf-8 -*-

file = open('test.txt')

word_dic = {}
#按行读取文件
for line in file:
	if line=='':continue
	#判断开头是否为From
	if line.startswith('From',0):
		word = line.split()[1];
		#将以Form开头的句子中的第二部分放入列表中
		word_dic[word] = word_dic.get(word,0)+1
#获取最大的值
maxCount = max(list(word_dic.values()))
words = []
#循环字典根据最大值找到对应的key也就是文本,可能存在多个
for key,value in word_dic.items():
	if value == maxCount:
		words.append(key)
print(words)




0
fromdtor
fromdtor

引用来自“nikitazhaohy”的评论

引用来自“fromdtor”的评论

# -*- coding:utf-8 -*-
fp = open('mbox-short.txt')
lines = fp.readlines()

cou = dict()
for line in lines:
    if line.startswith('From'):
        contact = line.split()[1]
        cou[contact] = cou.get(contact, 0) + 1

maxval = 0
maxkee = ''
for k, v in cou.items():
    if maxval < v:
        maxval = v
        maxkee = k

print maxkee, maxval



好像最后得到的输出不太对,正确的应该是cwen@iupui.edu 5
您给出的代码是最后输出是cwen@iupui.edu 10。
如果其中一段代码改成:
for line in fp:
    line = line.rstrip()
    if line == '' : continue
    words = line.split()
    if words[0] != 'From': continue
    if line.startswith('From'):
        contact = line.split()[1]
        cou[contact] = cou.get(contact, 0) + 1
最后的结果就是跟要求的一致了。
非常感谢您的解答,谢谢!!
客气
0
ye----ye
ye----ye
fp = open('mbox-short.txt')
contact = {}
text = fp.readlines()
for line in text:
       line = line.rstrip()
       if line == '':continue
       words = line.split()
       if words[0] == 'From':
              contact[words[1]] = contact.get(words[1], 0) + 1
key = ''
value = 0
for x,y in contact.items():
       if y > value:
              key = x
              value = y
print (key,'=>', value)

返回顶部
顶部