2017-10-14 39 views
1

理想的情況下,打印的結果將是:如何僅按照字母順序打印嵌套在列表中,字典內的內部字典的鍵?

- ainner 
- binner1 
- cinner2 
- dinner3 

但是我只成功地打印出使用.keys()鍵。

json_dict = {"key": "value", "key1": [{"binner": "inner_value"}, {"ainner1": "inner_value1"}, {"cinner": "inner_value"}, {"dinner1": "inner_value1"}]} 

def pprint(a_dict): 
    for k in a_dict["key1"]: 
     print("-", k.keys()) 

pprint(json_dict) 

這導致:

- dict_keys(['binner']) 
- dict_keys(['ainner1'])  
- dict_keys(['dinner1']) 
- dict_keys(['cinner']) 

我找了類似的功能,因爲這: {print("- {}".format(k)) for k in sorted(a_dict)}它適用於非嵌套字典

+0

您有四個期望的輸出列表;然而,這本字典只能提供兩個,即「binner」和「ainner1」。你能澄清嗎? – Ajax1234

+0

@ Ajax1234當然 - 我認爲這已經足夠自我解釋了。我會再添加兩個內在的說明來說清楚。 – Homer

回答

0

你可以試試這個:

json_dict = {"key": "value", "key1": [{"binner": "inner_value"}, {"ainner1": "inner_value1"}, {"cinner": "inner_value"}, {"dinner1": "inner_value1"}]} 
new_data = sorted([list(i.keys())[0] for i in json_dict["key1"]]) 

輸出:

['ainner1', 'binner', 'cinner', 'dinner1'] 
+0

添加'排序'(我不是downvoter。) – mshsayem

+1

大概這應該是_generalized_,而不是硬編碼僅用於OP的具體示例。 – miradulo

+0

'鍵()'不能被索引 – Homer

1

你想要返回的是密鑰的名稱。

json_dict = {"key": "value", "key1": [{"binner": "inner_value"},{"ainner1": "inner_value1"}]} 

for i in json_dict['key1']: 
    for x in i.keys(): 
     print (x) 

它導致該

binner 
ainner1 

您需要遍歷.keys()來訪問密鑰名。

0

一旦你你想要的對象(key1的價值)

a = [{"binner": "inner_value"}, {"ainner1": "inner_value1"}, 
    {"cinner": "inner_value"}, {"dinner1": "inner_value1"}] 

import itertools 

獲取從每個字典

b = map(dict.keys, a) 

鍵拼合的列表key view objects

c = itertools.chain.from_iterable(b) 

分類

d = sorted(c) 

打印

fmt_s = '- {}' 
for thing in d: 
    print(fmt_s.format(thing)) 
0

您發佈的代碼做了大部分工作的,從改變pprint

def pprint(a_dict): 
    for k in a_dict["key1"]: 
     print("-", k.keys()) 

def pprint(a_dict): 
    for k in a_dict["key1"]: 
     print("-", list(k.keys())[0]) 

產量:

- binner 
- ainner1 
- cinner 
- dinner1