关联数组awk vs python

时间:2014-05-05 14:06:35

标签: python awk associative-array

我在awk中使用关联数组,以便根据数据集中的值执行计算。我想知道如何在Python中执行完全相同的操作。

  

输入
  KEY1; CR 10个
  KEY1;分贝; 5
  KEY2; CR 5
  KEY2;分贝; 7
  KEY2; CR 9
  KEY2; CR 12个
  Key3; db; 3

awk -F";" '{a[$1]+=$2=="cr"?$3:$3*-1}END{for(i in a){print i FS a[i]}}' input
  

输出
  键1; 5
  密钥2; 19
  Key3; 9

1 个答案:

答案 0 :(得分:1)

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(伪代码)

完成
a[$1] += ( $3 if $2=="cr" else $3*-1 )