如何在以下代码示例中计算Python中的每个字典值输出?

时间:2016-08-06 12:49:30

标签: python dictionary

我正在学习使用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中的字典是无序的,并且无法在索引方面引用,但是有一种简单的方法可以设置计数器或以我看不到的方式计算每个输出吗?

非常感谢您提供的任何见解!

4 个答案:

答案 0 :(得分:3)

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 here

编辑:正如评论中所指出的,您也可以改为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"])

答案 1 :(得分:0)

在第一个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"])

答案 2 :(得分:0)

您可能希望在列表中使用枚举功能:

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"])

枚举函数除了元素本身外还返回索引。

编辑:

如Priyatham Kattakinda的回答所述,该函数的第二个参数表示第一个元素的索引(默认为零)。

答案 3 :(得分:0)

正如其他人所说,enumerate是最好的方法,所以我只想添加一些额外的提示,以提高程序的效率:

  1. 除非您以后确实需要user_list,否则直接或更好地迭代users.items(),因为您在python 2中,迭代users.iteritems()原因是items 3}}复制整件事,浪费空间和时间,而.items则不这样做。在python 3中iteritems相当于len(value["first_name"] + value["last_name"])。在这个可能没有重大影响的小程序中,如果字典大得多,你会发现差异

  2. 说到浪费的空间,这里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"]) 你正在制作一个新的字符串,没有任何其他的改变,只计算它的长度,所以你在这里浪费了一点空间,所以只需添加每个

  3. 的长度

    使用这些提示,更改是以下

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

    您可以查看.iteritems string以更好地控制它的外观,例如使用字符串格式化可以将其作为

    <div class="background">
       <div class="container layer">
          <div class="container description">
               <h2>Background</h2>
                  <h4>{{  }}</h4>
    
            <h5>{{  }}<a href="{{  }}" target="_blank">{{  }}</a></h5>
    
    
         </div>   
      </div>
    </div>
    

    (更多有趣的例子请看文档)