2016-06-30 12 views
0

私はSO、私は辞書に解析した後、これにより各Mac用のようにmax_visited市、第二max_visited都市とを取得するにはカウントにソートされたJSONファイル戻ってくるキー:キーのサブキーのサブキーでソートされたサブキーのペア。パイソン

{ 
"b0:47:bf:af:c1:42": 
{ 
"No. of visits": 10, "cities": 
    { 
     "Mumbai": {"count": 5,"last_visited": "5/22/2016"}, 
     "Kolkata": {"count": 2,"last_visited": "5/22/2016"}, 
     "Amritsar":{"count": 3,"last_visited": "5/22/2016"} 
    } 
}, 
"c0:ee:fb:71:be:0d": 
{ 
"No. of visits": 24, "cities": 
{ 
    "Mumbai": {"count": 2,"last_visited": "5/22/2016"}, 
    "Kolkata": {"count": 20,"last_visited": "5/22/2016"}, 
    "Amritsar":{"count": 2,"last_visited": "5/22/2016"} 
} 
} 
} 

を持っています。

for mac in dic_data: 
    sorted_cities = sorted(cities, key=lambda x: cities[x]['count'], reverse=True) 

このように出力されます。

結構ですが、私はそれが後でアクセスできるように、全体の辞書のための「カウント」でソートし、そのためにすべてのキーを返すようにしたいと言うことができます
['Kolkata', 'Amritsar', 'Mumbai'] 
['Amritsar', 'Mumbai', 'Kolkata'] 

。この例のように、"count"の最大値は、"c0:ee:fb:71:be:0d"キー"cities"サブキーと"Kolkata"サブキーです。私は後でそれを呼び出すことができるいくつかの構造にそれを格納したいと思います。 *配列の配列に格納しようとしています*。私は後でdic array[0][1]としてアクセスしたいと思っています。私はそれがこのようにすることができるかどうかはわかりません。私が必要とするのは、"Kolkata"とその後"count"です。 だから、私の出力は、あなたが行くここ

[["c0:ee:fb:71:be:0d","cities","Kolkata"], 
["b0:47:bf:af:c1:42","cities","Mumbai"], 
["b0:47:bf:af:c1:42","cities","Amritsar"], 
["c0:ee:fb:71:be:0d","cities","Mumbai"], 
["c0:ee:fb:71:be:0d","cities","Mumbai"], 
["c0:ee:fb:71:be:0d","cities","Amritsar"], 
["b0:47:bf:af:c1:42","cities","Kolkata"]] 
+0

結果は何ですか?それは配列か辞書のいずれかでなければなりません。配列はソートされ、辞書はそうではないので、私は前者を仮定します。希望の結果を更新してください。 – phihag

+0

@phihagどの要素が '' c0:ee:fb:71:be:0d ':' Kolkata'' aキーであるかの配列が欲しいです: '' count ''が最大秒数以下であるようなサブキーペア。私は降順でそれをやっている場合。 –

+0

@phihag私が最後にしたいのは、私はキーにアクセスできるということです:カウントが最大と2番目の最大のサブキー...。私はコード内でそれをさらに使いたいと思っています。 –

答えて

1

のように見えることがあり、それは、私が質問から理解どんな仕様ですか?お願い!

>>> with open('file.txt', 'r') as f: 
...  json_ = json.load(f) 
>>> formatted_ = [[key, 'cities', city, value['cities'][city]['count']] for key, value in json_.items() for city in value['cities']] 
>>> formatted_ 
185: [[u'b0:47:bf:af:c1:42', 'cities', u'Kolkata', 2], 
[u'b0:47:bf:af:c1:42', 'cities', u'Amritsar', 3], 
[u'b0:47:bf:af:c1:42', 'cities', u'Mumbai', 5], 
[u'c0:ee:fb:71:be:0d', 'cities', u'Kolkata', 20], 
[u'c0:ee:fb:71:be:0d', 'cities', u'Amritsar', 2], 
[u'c0:ee:fb:71:be:0d', 'cities', u'Mumbai', 2]] 
>>> sorted_ = sorted(formatted_, key=lambda x: x[3]) 
>>> sorted_ 
186: [[u'b0:47:bf:af:c1:42', 'cities', u'Kolkata', 2], 
[u'c0:ee:fb:71:be:0d', 'cities', u'Amritsar', 2], 
[u'c0:ee:fb:71:be:0d', 'cities', u'Mumbai', 2], 
[u'b0:47:bf:af:c1:42', 'cities', u'Amritsar', 3], 
[u'b0:47:bf:af:c1:42', 'cities', u'Mumbai', 5], 
[u'c0:ee:fb:71:be:0d', 'cities', u'Kolkata', 20]] 
>>> sorted_ = sorted(formatted_, key=lambda x: x[3], reverse=True) 
>>> sorted_ 
187: [[u'c0:ee:fb:71:be:0d', 'cities', u'Kolkata', 20], 
[u'b0:47:bf:af:c1:42', 'cities', u'Mumbai', 5], 
[u'b0:47:bf:af:c1:42', 'cities', u'Amritsar', 3], 
[u'b0:47:bf:af:c1:42', 'cities', u'Kolkata', 2], 
[u'c0:ee:fb:71:be:0d', 'cities', u'Amritsar', 2], 
[u'c0:ee:fb:71:be:0d', 'cities', u'Mumbai', 2]] 
>>> minimize_sorted_ = [item[:3] for item in sorted_] 
>>> minimize_sorted_ 
188: [[u'c0:ee:fb:71:be:0d', 'cities', u'Kolkata'], 
[u'b0:47:bf:af:c1:42', 'cities', u'Mumbai'], 
[u'b0:47:bf:af:c1:42', 'cities', u'Amritsar'], 
[u'b0:47:bf:af:c1:42', 'cities', u'Kolkata'], 
[u'c0:ee:fb:71:be:0d', 'cities', u'Amritsar'], 
[u'c0:ee:fb:71:be:0d', 'cities', u'Mumbai']] 
関連する問題