簡體   English   中英

如何在以下代碼示例中計算Python中的每個字典值輸出?

[英]How can I count each dictionary value output in Python in the following code example?

我正在學習使用Python(2.7)中的列表,元組和字典,並將字典轉換為列表並引用它們,但在理解如何將計數數添加到我要檢索的特定值時遇到一些困難來自詞典。

我從這個代碼開始如下:

users = {
    'Participants': [ 
        {'first_name':  'Jerry', 'last_name' : 'Johnson'},
        {'first_name' : 'Blaine', 'last_name' : 'Diamond'},
        {'first_name' : 'Ginny', 'last_name' : 'Gelspy'},
        {'first_name' : 'LG', 'last_name' : 'Murphy'}
     ],
    'Leaders': [
        {'first_name' : 'TJ', 'last_name' : 'Knight'},
        {'first_name' : 'Jasper', 'last_name' : 'Red'}
     ]
}

users_list = users.items()  # converts users dict to a list
for key, data in users_list: 
    print key
    for value in data:
        print "-", value["first_name"].upper(), value["last_name"].upper(), "-", len(value["first_name"] + value["last_name"])

我目前的輸出如下:

Participants
- JERRY JOHNSON - 12
- BLAINE DIAMOND - 13
- GINNY GELSPY - 11
- LG MURPHY - 8
Leaders
- TJ KNIGHT - 8
- JASPER RED - 9

但是,我想為每個參與者或領導者添加一個計數,因此輸出將改為:

Participants
1 - JERRY JOHNSON - 12
2 - BLAINE DIAMOND - 13
3 - GINNY GELSPY - 11
4 - LG MURPHY - 8
Leaders
1 - TJ KNIGHT - 8
2 - JASPER RED - 9

以這種格式:

<dictionary name>
<count> - <FULL NAME IN CAPS> - <char count in full name no space included>

我確實讀過python中的字典是無序的,並且無法在索引方面引用,但有沒有一種簡單的方法來設置計數器或以我沒有看到的方式計算每個輸出?

非常感謝您提供的任何見解!

for key, data in users_list: 
    print key
    for count, value in enumerate(data):
        print (count + 1), "-", value["first_name"].upper(), value["last_name"].upper(), "-", len(value["first_name"] + value["last_name"])

應該這樣做。 閱讀更多關於enumerate 信息

編輯:正如評論中指出的,你也可以做enumerate(data, start=1) 在這種情況下你不需要count + 1

for key, data in users_list: 
    print key
    for count, value in enumerate(data, start=1):
        print count, "-", value["first_name"].upper(), value["last_name"].upper(), "-", len(value["first_name"] + value["last_name"])

在第一個for循環后立即將計數器啟動到0,並在第二個for循環后每次增加1:

for key, data in users_list: 
    counter = 0
    print key
    for value in data:
        counter += 1
        print str(counter), "-", value["first_name"].upper(), value["last_name"].upper(), "-", len(value["first_name"] + value["last_name"])

您可能希望在列表中使用枚舉函數,如下所示:

users_list = users.items()  # converts users dict to a list
for key, data in users_list:
print key
for i, value in enumerate(data, 1):
    print str(i), "-", value["first_name"].upper(), value["last_name"].upper(), "-", len(value["first_name"] + value["last_name"])

除了元素本身之外, enumerate函數還返回索引。

編輯:

正如Priyatham Kattakinda的回答中所提到的,函數的第二個參數表示第一個元素的索引(默認值為零)。

正如其他人所提到的, enumerate是最好的方法,所以我將添加一些額外的提示以使程序更有效:

  1. 除非你以后真的需要user_list ,直接或更好地迭代users.items()因為你在python 2中,迭代users.iteritems()原因是.items復制整個東西,這是一個浪費空間和時間,而.iteritems則不這樣做。 在python 3中, items相當於iteritems 在這個可能沒有重大影響的小程序中,如果字典大得多,你就會注意到差異

  2. 並談到浪費的空間,這里len(value["first_name"] + value["last_name"])你正在制作一個新的字符串,沒有任何其他變化,只計算它的長度,所以你浪費了一點點的空間在這里,所以只需添加每個的長度

隨着這些提示,變化是一個跟隨

for key, data in users.iteritems(): 
    print key
    for i, value in enumerate(data, 1):
        print i, "-", value["first_name"].upper(), value["last_name"].upper(), "-", len(value["first_name"]) + len(value["last_name"])

您可以查看字符串 格式以更好地控制它的外觀,例如使用字符串格式化可以將其作為

print "{} - {} {} - {}".format(i, value["last_name"].upper(), value["last_name"].upper(), len(value["first_name"]) + len(value["last_name"]) )

(有關更有趣的示例,請查看文檔)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM