python字典和結構化數據

5.1 字典數據類型ruby

字典的索引能夠使用許多不一樣類型的數據,不僅是整數。字典的索引被稱爲「鍵」,鍵及其關聯的值稱爲「鍵—值」對,在代碼中,字典輸入時帶花括號{}。數據結構

字典中的表項是不排序的,因此字典不能像列表那樣切片。app

5.1.1 keys()、values()和items()方法函數

key()、values()和items()方法將返回相似於列表的值,分別對應於字典的鍵、值和鍵-值對。這些方法返回的值不是真正的列表,他們不能被修改,沒有append()方法。但這些數據類型能夠用於for循環。spa

>>> spam = {'color':'red','age':42}
>>> for i in spam.values():
	print (i)

red
42

能夠經過list()方法將字典轉換爲列表code

>>> list(spam.keys())
['color', 'age']
>>> list(spam.values())
['red', 42]
>>> spam
{'color': 'red', 'age': 42}

5.1.2 get()方法setdefault()方法orm

get()方法有兩個參數:要取得其值的鍵,以及若是該鍵不存在時,返回的備用值視頻

setdefault()方法提供了一種方式,傳遞給該方法的第一個參數,是要檢查的鍵,第二個參數,是若是該鍵不存在時要設置的值。若是該鍵存在就返回鍵值。排序

若是程序中導入了pprint()模塊,就能夠使用pprint()和pformat()打印字典。索引

import pprint
message = 'It was a bright cold day in April, and the clocks were striking thirteen.'
count = {}

for character in message:
    count.setdefault(character, 0)
    count[character] = count[character] + 1

print(pprint.pformat(count))
#pprint.pprint(count)  print(pprint.pformat(count))這兩種表達式等價

運行結果:

{' ': 13,
 ',': 1,
 '.': 1,
 'A': 1,
 'I': 1,
 'a': 4,
 'b': 1,
 'c': 3,
 'd': 3,
 'e': 5,
 'g': 2,
 'h': 3,
 'i': 6,
 'k': 2,
 'l': 3,
 'n': 4,
 'o': 2,
 'p': 1,
 'r': 5,
 's': 3,
 't': 6,
 'w': 2,
 'y': 1}

5.2 實踐項目

  1. 好玩遊戲的物品清單

你在建立一個好玩的視頻遊戲。用於對玩家物品清單建模的數據結構是一個字典。其中鍵是字符串,描述清單中的物品,值是一個整型值,說明玩家有多少該物品。例如,字典值{'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1,'arrow': 12}意味着玩家有 1 條繩索、6 個火把、42 枚金幣等。 寫一個名爲displayInventory()的函數,它接受任何可能的物品清單,並顯示以下:

Inventory:
1 rop
6 torch
42 gold coin
1 dagger
12 arrow
Total number of items :  62

代碼以下:

def displayInventory(dic):
    print('Inventory:')
    count = 0
    for k, v in dic.items():
        print(str(v) + ' ' + k)
        count = v+count
    print('Total number of items : ', count)


dicValue = {'rop': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12}
displayInventory(dicValue)
  1. 假設征服一條龍的戰利品表示爲這樣的字符串列表:
dragonLoot = ['gold coin', 'digger', 'gold coin', 'gold coin', 'ruby']

寫一個名爲 addToInventory(inventory, addedItems)的函數,其中 inventory 參數 是一個字典,表示玩家的物品清單(像前面項目同樣),addedItems 參數是一個列表, 就像 dragonLoot。 addToInventory()函數應該返回一個字典,表示更新過的物品清單。

def displayInventory(dic):
    print('Inventory:')
    count = 0
    for k, v in dic.items():
        print(str(v) + ' ' + k)
        count = v+count
    print('Total number of items : ', count)


def addToInventory(inventory, addeditems):
    for i in addeditems:
        if i in inventory.keys():
            inventory[i] += 1
        else:
            inventory.setdefault(i, 1)            
    return inventory


inv = {'gold coin':42, 'rope':1}
dragonLoot = ['gold coin', 'digger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv,dragonLoot)
displayInventory(inv)

前面的程序(加上前一個項目中的 displayInventory()函數)將輸出以下:

Inventory:
45 gold coin
1 rope
1 digger
1 ruby
Total number of items :  48
相關文章
相關標籤/搜索