如何从Counter获得更密集的表示?

时间:2018-02-16 06:56:08

标签: python

我有一个价值观,我想总结一下。 我已经使用此代码来实现此目的

Error: Command failed: ./configure --with-php-config=/home/.phpbrew/php/php-5.5.38/bin/php-config >> /home/.phpbrew/build/php-5.5.38/ext/mongo///build.log 2>&1 returns:

这会产生以下值,这是我期望的值。

countTest = Counter(chain.from_iterable(e.items() for e in tickets))
result = [{'name': key, 'value': value} for key, value in countTest.items()]
print(json.dumps(result, sort_keys=True, indent=4))

然而,我想要更密集的代表,最好像这样

[
    {
        "name": [
            "ticket",
            "Class A"
        ],           
        "value": 1
    },
    {
        "name": [
            "ticket",
            "Class B"
        ],
        "value": 2
    },
    {
        "name": [
            "ticket",
            "Class C"
        ],
        "value": 3
    }
]

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

尝试这样的事情,

In [11]: lst = [{'name': ['ticket', 'Class A'], 'value': 1},
...:  {'name': ['ticket', 'Class B'], 'value': 2},
...:  {'name': ['ticket', 'Class C'], 'value': 3}]

In [12]: {'tickets':dict((i['name'][1],i['value']) for i in lst)}
Out[12]: {'tickets': {'Class A': 1, 'Class B': 2, 'Class C': 3}}

lst是您生成的第一个结果。

答案 1 :(得分:1)

itertools更难。

>>> {name: {item['name'][1]: item['value'] for item in items} for name, items in itertools.groupby(result, lambda x: x['name'][0])}
{'ticket': {'Class A': 1, 'Class B': 2, 'Class C': 3}}

从那里JSON很容易。

答案 2 :(得分:0)

从原始的结果开始,并假设“ticket”是唯一的属性:




  print(json.dumps( {'ticket':{x ['name'] [1]:x ['value'] for x in result}},
 sort_keys = True,indent = 4))
#{&# xA;#“ticket”:{
#“A类”:1,
#“B类”:2,
#“C类”:3
#}&# XA;#}