Python学习笔记(二)——字典和结构化数据

字典数据类型

>>> mycat = {'size':'fat','color':'gray','disposition':'loud'}
>>> mycat
{'size': 'fat', 'color': 'gray', 'disposition': 'loud'}
>>> mycat['size']
'fat'
>>> spam = {123:'hello',456:'word'}
>>> spam
{123: 'hello', 456: 'word'}
>>> spam[123]
'hello'

字典与列表

字典的相等不考虑元素的位置,而列表必须位置一致

>>> spam = {123:'hello',456:'word'}
>>> spam1 = {456:'word',123:'hello'}
>>> spam == spam1
True
>>> spam = [1,2,3]
>>> spam1 = [3,2,1]
>>> spam == spam1
False

字典的动态查询与添加

birthdays = {}
while True:
    name = input()
    if name == '':
        break
    if name in birthdays:
        print(birthdays[name] + ' is the birthday of '+name)
    else:
        print('I do not have birthday information of '+name)
        print('what is their birthday')
        body = input()
        birthdays[name] = body
        print('Birthday database updated.')
for i in birthdays:
    print(i +' 的生日在 '+birthdays[i])
print(birthdays)
---------------------------------------------------------
==========RESTART: D:/python/字典题.py ============
Tom
I do not have birthday information of Tom
what is their birthday
Dec 12
Birthday database updated.
Tom
Dec 12 is the birthday of Tom
Lili
I do not have birthday information of Lili
what is their birthday
Mar 4
Birthday database updated.
Alice
I do not have birthday information of Alice
what is their birthday
Apr 1
Birthday database updated.
Lili
Mar 4 is the birthday of Lili

Tom 的生日在 Dec 12
Lili 的生日在 Mar 4
Alice 的生日在 Apr 1
{'Tom': 'Dec 12', 'Lili': 'Mar 4', 'Alice': 'Apr 1'}

python中字典的循环遍历的两种方式

keys()、values()和items()方法

>>> spam ={'color': 'red', 'age': '42'}
>>> for i in spam:
    print('key = '+ i +',value= '+spam[i])


key = color,value= red
key = age,value= 42

直接写i in spam 固然简单,但当遇到value的字符类型不一样的时候,就会报错

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


color
age

使用spam.keys() 便可以遍历字典中的key

>>> for i in spam.values():
    print(i)


red
42

同理,在使用了spam.value() 便可以遍历字典中的value

>>> for i in spam.items()
SyntaxError: invalid syntax
>>> for i in spam.items():
    print(i)


('color', 'red')
('age', 42)

spam.items() 比较特殊,他遍历出来的是(key,value)

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

检查字典中是否存在键或值

>>> spam
{'color': 'red', 'age': 42}
>>> 'name' in spam.keys()
False
>>> 'color' in spam.keys()
True
>>> 'red' in spam.values()
True

get()方法

#使用get()
>>> temp = {'apple':5,'cups':4}
>>> 'I am bringing ' + str(temp.get('apple',0)) + ' apple'
'I am bringing 5 apple'
>>> 'I am bringing ' + str(temp.get('eggs',0)) + ' eggs'
'I am bringing 0 eggs'
>>> temp
{'apple': 5, 'cups': 4}
#get()不改变原来字典内容
#未使用get()
>>> 'I am bringing ' + str(temp['apple']) + ' apples'
'I am bringing 5 apples'
>>> 'I am bringing ' + str(temp['eggs']) + ' eggs'
Traceback (most recent call last):
  File "<pyshell#55>", line 1, in <module>
    'I am bringing ' + str(temp['eggs']) + ' eggs'
KeyError: 'eggs'

setdefault()方法

在字典中为某个键值设置一个默认值,当该键没有任何值使用时,默认值生效

>>> spam
{'color': 'red', 'age': 42}
>>> spam.setdefault('name','Tom')
'Tom'
>>> spam
{'color': 'red', 'age': 42, 'name': 'Tom'}
>>> spam.setdefault('name','Joy')
'Tom'
>>> spam['name'] = 'Lili'
>>> spam
{'color': 'red', 'age': 42, 'name': 'Lili'}

漂亮打印——setdefault()的具体使用

import pprint
temp = 'Yes,I can do it.'
cout = {}
for i in temp:
    cout.setdefault(i,0)
    cout[i] = cout[i]+1
pprint.pprint(cout)

RESTART: C:/Users/lxm123456/AppData/Local/Programs/Python/Python37/漂亮打印setdefault.py 
{' ': 3,
 ',': 1,
 '.': 1,
 'I': 1,
 'Y': 1,
 'a': 1,
 'c': 1,
 'd': 1,
 'e': 1,
 'i': 1,
 'n': 1,
 'o': 1,
 's': 1,
 't': 1}

使用数据结构对真实世界建模

井字棋盘

= RESTART: 井字棋盘.py =
tboard = {'T-L':' ','T-C':' ','T-R':' ',
          'M-L':' ','M-C':' ','M-R':' ',
          'B-L':' ','B-C':' ','B-R':' '}

'''
tboard = {}
for a in ['T','M','B']:
    for b in ['L','C','R']:
        tboard.setdefault(a+'-'+b,' ')
'''
def func(board):
    print(board['T-L'] +'|'+ board['T-C'] + '|' +board['T-R'])
    print(board['M-L'] +'|'+ board['M-C'] + '|' +board['M-R'])
    print(board['B-L'] +'|'+ board['B-C'] + '|' +board['B-R'])
turn = 'X'
for i in range(9):
    func(tboard)
    print('请 '+turn+ ' 选定位置')
    temp = input()
    tboard[temp] = turn
    if turn == 'X':
        turn = 'O'
    else:
        turn = 'X'

嵌套字典和列表

all = {'Tom':{'Apple':4,'eggs':3},
       'Lili':{'moodles':2,'Apple':2},
       'Joy':{'Rice':3,'cups':2}
    }
def totalBrought(temp,item):#指定查询
    num = 0
    for v in temp.values():
        num = num + v.get(item,0)
    return num


def func(temp): #全部查询
    for v in temp.values():
        for a in v.keys():
            t.setdefault(a,0)
            t[a] = t[a] + v[a]
t = {}
func(all)
for k,v in t.items():
    print('统一查询:'+k+' = ' + str(v))
print()
print('指定查询:Apple = ' + str(totalBrought(all,'Apple')))


= RESTART: 食物总数.py =
统一查询:Apple = 6
统一查询:eggs = 3
统一查询:moodles = 2
统一查询:Rice = 3
统一查询:cups = 2

指定查询:Apple = 6
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值