美文网首页
Python编程快速上手-第五章

Python编程快速上手-第五章

作者: parkwu | 来源:发表于2018-07-01 17:26 被阅读0次

字典

字典的索引是key,key一般是字符串或数字
names = {123:'geed','park':'nice','900':'pool'}
names[123]
names['park']
访问不存在的key会导致错误,在访问前可以先判断成员资格,使用if语句
if name in birthdays:

keys() / values() / items()

字典的dict_keys、dict_values 和dict_items数据类型可用于for循环。获取数据类型type()。
for v in spam.values()
for k in spam.keys()
for i in spam.items(),for key , value in spam.items()
list(spam.keys())

get()方法

该方法仅仅用于dict()。类似于向dict中取一个key的vaule,如果key不存在就返回默认值,不会改变原始dict。

>>> picnicItems = {'apples': 5, 'cups': 2}
>>>picnicItems.get('cups', 0)
2

setdefault()方法

为Dict的key设置一个默认值,如果Dict中不存在该Key,就在Dict中添加该Key及其默认value同时返回该key的value,如果该Key存在就返回key对应的values值。
key存在就不改变dict,如果key不存在dict就会添加新的键值对。

统计字符串的字母出现的次数:

def count_char(message):
    count = {}
    for char in message:
        count.setdefault(char,0)
        count[char] = count[char] + 1
    print(count)
    return(count)

测试函数

import unittest
from open import count_char

class OpenTest(unittest.TestCase):

    def test_count(self):
        message = 'It was a bright cold day in April, and the clocks were striking thirteen.'
        fun_return = count_char(message)
        result = {' ': 13, ',': 1, '.': 1, 'A': 1, 'I': 1, 'a': 4, 'c': 3, 'b': 1, 'e': 5, 'd': 3, 'g': 2, 'i':
                6, 'h': 3, 'k': 2, 'l': 3, 'o': 2, 'n': 4, 'p': 1, 's': 3, 'r': 5, 't': 6, 'w': 2, 'y': 1}
        self.assertEqual(fun_return,result)
unittest.main()

从运行的结果看,dict的排序每次都有差异,即便排序不一样,也不会影响 self.assertEqual(fun_return,result)的结果

5.3.2 嵌套的字典和列表

例子的思路

allGuests = {'Alice': {'apples': 5, 'pretzels': 12},
            'Bob': {'ham sandwiches': 3, 'apples': 2},
            'Carol': {'cups': 3, 'apple pies': 1}}

循环两次字典将水果的名字提取出来,再通过setdefault()将水果的名字和数量添加到新的列表

import pprint
def total_brought(guest):
   furists = {}
   for brougt in guest.values():
       for furist , numbers in brougt.items():
           furists.setdefault(furist,0)
           furists[furist] = furists[furist] + numbers
   pprint.pprint(furists)

5.6.2 列表到字典

用 if - else 去实现感觉逻辑很清晰,但是代码更多。
用setdefault逻辑上要适应一下才行

def add_to_inventory(intentory,added_items):
    for added_item in added_items:
        # if added_item in intentory.keys():
        #     intentory[added_item] += 1
        # else :
        #     intentory[added_item] = 1 
        intentory.setdefault(added_item,0)
        intentory[added_item] = intentory[added_item] + 1
    return intentory 

用循环对比了一下两种方式实现的时间
使用if-else耗时37.539s
setdefault耗时38.618s
if-else执行时间更短。

time1 = datetime.datetime.now()
print(time1)
n = 10**6
while n>0:
    stuff = {'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12}
    dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']

    new = add_to_inventory(stuff,dragonLoot)
    n = n -1
    # print(new)
time2 = datetime.datetime.now()
print(time2)
print(time2-time1)

获取系统时间(us)

系统时间,us级别
import datetime

datetime.datetime.now()
print(time2-time1)

相关文章

网友评论

      本文标题:Python编程快速上手-第五章

      本文链接:https://www.haomeiwen.com/subject/bqlcuftx.html