使用两个键和值

时间:2017-12-09 13:13:09

标签: python dictionary

我有一个Python程序prog1(mapper)在三个字段中打印出来。它以

结尾
 print user, text, rt

第一个字段是用户名。其次是推文。第三是转发#。试图找出TopN转推

以下是一个例子

inocybetech RT @ONAPproject: #ONAPAmsterdam is here! This first code release delivers a unified architecture for end-to-end, closed-loop…  5
jchawki RT @ONAPproject: #ONAPAmsterdam is here! This first code release delivers a unified architecture for end-to-end, closed-loop…  6
jchawki RT @opnfv: Congrats to @ONAPproject on Amsterdam, on its 1st platform release! Learn more about its unified architecture for e…  2
jchawki RT @jzemlin: Now Available! #ONAP Amsterdam brings globally shared implementation for network automation, based on OSS & open st…  3
jchawki RT @bdwick: Now Available! #ONAP Amsterdam brings globally shared implementation for network automation, based on OSS & open st…  1

我通过stdin将它传递给另一个Python程序prog2(reducer)。我的问题是弄清楚如何将其读入一个包含两个键(用户和文本)和值(转发)的字典

如果我说

for line in sys.stdin

行没有捕获整个字符串。我需要做的是捕获字典中的三个字段,其中包含两个键和一个值。

你能说点什么吗?我刚开始学习Python

由于

1 个答案:

答案 0 :(得分:1)

使用更易于解析的格式可能更好。如果您打印的所有内容都是以空格分隔的,那么之后分隔各个字段可能会非常复杂,因为推文的文本包含空格(甚至可能是换行符)。

一种选择是生成/解析CSV(这样做的另一个好处是,您可以轻松地将输出用于支持CSV输入的其他软件)。

所以作者(csvw.py)可以用松散的术语表示:

import csv
import sys

writer = csv.writer(sys.stdout, delimiter = ' ')

writer.writerow(['Name', 'Content\nof the message', 12])

和读者(csvr.py):

import csv
import sys

reader = csv.reader(sys.stdin, delimiter = ' ')
stat = {}
for record in reader:
    name, message, cnt = record

    key = (name, message)
    stat[key] = int(cnt)

print(stat)

然后如果你这样做:

python csvw.py | python csvr.py

你得到:

{('Name', 'Content\nof the message'): 12}