字典
字典特性: 字典是无序的,key必须是唯一的
- 创建字典
>>> d = {'name':'lily','age':22} >>> d = dict({'name':'lily','age':22}) >>> d = dict([('two', 2), ('one', 1), ('three', 3)]) >>> d=dict(k1='aaa',k2='bbb') >>> d= dict(zip(['one', 'two', 'three'], [1, 2, 3]))
- 索引 dic['name']
- 新增 dic['info']='girl'
- 删除 dic.pop('info)
- 循环
- 长度 len(dic)
- 键,值,键值对 dic.keys() dic.values() dic.items()
| clear(...) # 清空字典 | | copy(...) #拷贝 | D.copy() -> a shallow copy of D | | fromkeys(iterable, value=None, /) #创建新字典.以序列seq中元素做字典的键,value为字典所有键对应的初始值 |
>>> dict1=dict1.fromkeys(range(1,3),'val')
>>> dict1
{1: 'val', 2: 'val'}>>> seq=(1,2,3) >>> d={} >>> d.fromkeys(seq,10) {1: 10, 2: 10, 3: 10} | | get(...) #根据key获取值,如果k不存在默认返回none,如果设置了k,v 则返回v ,不改变dic | >>> dic = {'age': 22, 'name': 'lily'} >>> dic.get('name','bao') 'lily' >>> dic.get('info','girl') 'girl' >>> dic {'age': 22, 'name': 'lily'} | | items(...) #所有项的列表形式 | D.items() -> a set-like object providing a view on D's items | | keys(...) #所有的key列表 | >>> dic.keys() dict_keys(['age', 'name']) | pop(...) #删除 | >>> dic.pop('info') 'girl' | | popitem(...) #随机删除 | | setdefault(...) #如果key不存在, 则创建,如果存在,则返回已存在的值且不修改 | >>> dic = {'age': 22, 'name': 'lily'} >>> dic.setdefault('age',10) 22 >>> dic.setdefault('info','girl') 'girl' >>> dic {'age': 22, 'name': 'lily', 'info': 'girl'} | | values(...) #所有的value列表 | >>> dic.values() dict_values([22, 'lily']) | update(...) #把dic2更新到dic里面去 >>> dic = {'name': 'lily', 'age': 22} >>> dic.update({'gender':'girl'}) >>> dic {'name': 'lily', 'age': 22, 'gender': 'girl'}
itervalues()方法
迭代字典的value values() itervalues()方法
迭代字典的k,v items() iteritems()
d = { 'Adam': 95, 'Lisa': 85} print d.values() # [85, 95] #values()把value转化成一个列表 for v in d.values(): print v 85 95
dict除了values()方法外,还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样:
print d.itervalues() # <dictionary-valueiterator object at 0x106adbb50> for v in d.itervalues(): print v 85 95
说明: values() 方法实际上把一个 dict 转换成了包含 value 的list。 但是 itervalues() 方法不会转换,所以 itervalues() 方法比 values()方法节省了生成 list 所需的内存
统计列表里面不同值的个数
>>> l=['a','a','b','b','c'] >>> d={} >>> for i in l: ... d.setdefault(i,0) ... d[i] += 1 ... 0 1 0 1 0 >>> d {'a': 2, 'b': 2, 'c': 1}

''' 需求: 可依次选择进入各子菜单 可从任意一层往回退到上一层 可从任意一层退出程序 所需新知识点:列表、字典 ''' menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车站': { '携程': {} } }, '浦东': {}, }, '山东': {}, } curr_menu = menu m_list = [] while True: for i in curr_menu: # 列出一级目录 print(i) menu1 = input(">>>") if menu1 in curr_menu: #输入目录名时,进入二级目录 m_list.append(curr_menu) # 将此目录的二级所有信息存入m_list,循环..依次存入三级,四级.. #print("curr_menu:",curr_menu) curr_menu = curr_menu[menu1] #将二级目录变为一级目录 elif menu1 == 'f': # 输入f 时,返回上一级目录 if len(m_list) != 0: curr_menu = m_list.pop() else: print("已到达顶级目录,按q可退出") elif menu1 == "q": # 输入q时,直接退出程序 print("程序退出") break else: #否则,提示 print("您的输入不正确,请重新输入")