您好,登錄后才能下訂單哦!
本篇內容主要講解“python列表、字典、循環、判斷舉例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python列表、字典、循環、判斷舉例分析”吧!
下面通過一個簡化的虛擬案例做一次深入學習python小練習,有某果園銷售數據如下:
sell_list = [ {'客戶': '張三', '種類': '蘋果','數量':100}, {'客戶': '李四', '種類': '蘋果','數量':200}, {'客戶': '李四', '種類': '香梨','數量':200}, {'客戶': '李四', '種類': '香梨','數量':300}, {'客戶': '張三', '種類': '蘋果','數量':100}, {'客戶': '王五', '種類': '香蕉','數量':500}, {'客戶': '王五', '種類': '香蕉','數量':150}, {'客戶': '王五', '種類': '香蕉','數量':150}, {'客戶': '王五', '種類': '蘋果','數量':500}, {'客戶': '趙六', '種類': '葡萄','數量':300}, {'客戶': '李四', '種類': '葡萄','數量':300}, {'客戶': '趙六', '種類': '蘋果','數量':300}, ]
客戶希望對數據進行整理,期待得到的數據集格式類似如下這樣:
result_list = [ ['張三', {'蘋果': 300, '香蕉': 200, }], ['李四', {'蘋果': 100, '香蕉': 200, }], ['王五', {'蘋果': 100, '香蕉': 200, }], ]
客戶原始數據池是列表,列表元素是客戶、果名、數量。現在的需求是對列表元素進行匯總,得出客戶、果名、數量的匯總表。
首先遍歷原始數據池,判斷客戶名:
若在數據集中客戶名不存在,則數據集中添加客戶名,同時將果名和數量以字典格式加入數據集。
若在數據集中客戶名存在,則判斷果名:
若在數據集中果名存在,則將數量累加。
若在數據集中果名不存在,則添加果名和數量。
通過以上分析有個大致的框架,通過2層嵌套循環加判斷來編寫代碼。
我設想的代碼有2種方案:
二層循環嵌套if的列表實現方式,優點是較省內存,缺點是速度略慢:
result_list = [] for i in sell_list: for j in result_list: if j[0] == i['客戶']: if i['種類'] not in j[1]: j[1][i['種類']] = i['數量'] else: j[1][i['種類']] = j[1][i['種類']] + i['數量'] break else: result_list.append([i['客戶'], {i['種類']: i['數量'], }]) for i in result_list: print(i) out: ['張三', {'蘋果': 200}] ['李四', {'蘋果': 200, '香梨': 500, '葡萄': 300}] ['王五', {'香蕉': 800, '蘋果': 500}] ['趙六', {'葡萄': 300, '蘋果': 300}]
上述代碼有一個需要特別注意的地方,循環體內break會跳過整個循環體(含循環體的else部分)。這一點很多教材都沒有講得很透徹。
單層循環嵌套if的字段實現方式,優點是速度較快,缺點是較費內存:
result_dict = {} for i in sell_list: if i['客戶'] in result_dict: if i['種類'] not in result_dict[i['客戶']]: result_dict[i['客戶']][i['種類']] = i['數量'] else: result_dict[i['客戶']][i['種類']] += i['數量'] else: result_dict[i['客戶']] = {i['種類']: i['數量']} for i, j in result_dict.items(): print(i, j) out: 張三 {'蘋果': 200} 李四 {'蘋果': 200, '香梨': 500, '葡萄': 300} 王五 {'香蕉': 800, '蘋果': 500} 趙六 {'葡萄': 300, '蘋果': 300}
在字典實現方式中看起來是比列表實現方式少了一層循環,實質上這個循環的目的在“if i['種類'] not in result_dict[i['客戶']]:”這個部分已經實現了,在容器中找成員,字典是速度最快同時也是最費內存的方式。
到此,相信大家對“python列表、字典、循環、判斷舉例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。