关联数组awk与python
我在awk中使用关联数组,以便根据数据集中的值执行计算。我想知道如何在Python中执行完全相同的操作 输入关联数组awk与python,python,awk,associative-array,Python,Awk,Associative Array,我在awk中使用关联数组,以便根据数据集中的值执行计算。我想知道如何在Python中执行完全相同的操作 输入 键1;铬;10 键1;分贝;5 键2;铬;5 键2;分贝;7 键2;铬;9 键2;铬;12 键3;分贝;三, 输出 键1;5 键2;19 键3;九, Python 2: data = '''Key1;cr;10 Key1;db;5 Key2;cr;5 Key2;db;7 Key2;cr;9 Key2;cr;12 Key3;db;3 ''' results = {} for line
键1;铬;10
键1;分贝;5
键2;铬;5
键2;分贝;7
键2;铬;9
键2;铬;12
键3;分贝;三, 输出
键1;5
键2;19
键3;九, Python 2:
data = '''Key1;cr;10
Key1;db;5
Key2;cr;5
Key2;db;7
Key2;cr;9
Key2;cr;12
Key3;db;3
'''
results = {}
for line in data.splitlines():
fields = line.split(';')
if fields[0] not in results:
results[fields[0]] = 0
if fields[1] == 'cr':
results[fields[0]] += int(fields[2])
else:
results[fields[0]] -= int(fields[2])
#--- END ---
for key in sorted(results.keys()):
print '%s;%s' % (key, results[key])
编辑: 顺便说一下:
a[$1]+=$2=="cr"?$3:$3*-1
可以在Python中完成(伪代码)
你能给出一个实际的算法而不是一个不起作用的awk命令吗?python专家可能不知道awk,任何人都会被这个神秘的语句
a[$1]+=$2==“cr”?$3:$3*-1
弄糊涂。您不能添加一些括号来澄清(并使其可移植——正如所写的那样,代码会从某些awk中产生语法错误)和解释awk代码正在做什么吗?如果你这么做的话,你将有机会得到一个Python专家来帮助你。cr
(贷方)值相加,然后减去db
(借方)每个不同键的运行总数的值。如何将键3求和为9?我的主要观点是,在没有解释的情况下发布一个语言X的程序,并询问如何用语言Y编写它是一个坏主意,因为它需要精通这两种语言的人来回答,而您真正需要的是一个语言Y中的脚本是了解语言Y的人。但复杂的三元表达式没有帮助!
a[$1]+=$2=="cr"?$3:$3*-1
a[$1] += ( $3 if $2=="cr" else $3*-1 )