十二.作業難點(有IT大牛路過的可以幫我解答我的疑問?萬分感謝)--轉行的苦逼人

来源:https://www.cnblogs.com/hpcz190911/archive/2019/09/22/11570018.html
-Advertisement-
Play Games

今天開始改變寫博客風格,其他不多說. 今天題目如下: 我先寫自己的寫程式的方法,先直接看正確完整的代碼直接往下看 一開始看了題目,我發現的規律是"alex"、"name"、"hobby"由多個變成一個 因此我想到了用set集合去重 我是想要把user_list列表的鍵收集起來變成列表,然後通過set ...


今天開始改變寫博客風格,其他不多說.

今天題目如下:

# 7、寫函數,完成以下功能: (8分)
# 例如有:
# user_list=[
#     {"name": "alex","hobby":"抽煙"},
#     {"name" :"alex","hobby":"喝酒"},
#     {"name" :"alex","hobby":"燙頭"},
#     {"name":"wusir","hobby":"喊麥"},
#     {"name":"wusir","hobby":"街舞"},
#           ]
# 編寫函數處理user_list 並返回如下結果:
# [{"name":"alex","hobby_list": ["抽煙","喝酒","燙頭"]},
# {"name":"wuhir","hobby_list": ["喊麥","街舞"]},]

我先寫自己的寫程式的方法,先直接看正確完整的代碼直接往下看

一開始看了題目,我發現的規律是"alex"、"name"、"hobby"由多個變成一個

因此我想到了用set集合去重

我是想要把user_list列表的鍵收集起來變成列表,然後通過set集合去重

但是走到下麵代碼的時候發現無法再下手寫代碼,我想知道我這樣的思路錯在哪裡了

dict={}
list=[]
for a in user_list:
    # print(a)
    for k,v in a.items():
        # print(k,v)
        dict.setdefault(k,[]).append(v)
        for b,c in dict.items():
            print(b,c)
print(dict)

上面的難題卡了我兩三個小時,卡在我一直把'name'和'hobby'設置成一個變數,導致感覺變數太多,無法下手(小聲逼逼:不知道是不是這個原因)

如果不是我說的原因,我想知道問題出在哪裡

所以我想了很久想不出來,然後去百度找,找到下麵的代碼,但是我也沒有看懂

result = []     # {'name': 'alex', 'hobby_list': ['抽煙']}
for user in user_list:
    # 1.對空列表進行for迴圈,判斷是否在result裡面存在了這個人, 如果存在. 把hobby_list添加一個hobby
    # 2.不存在. 創建一個新字典
    for new_user in result:
        if user['name'] == new_user['name']:
            new_user['hobby_list'].append(user['hobby'])
            break
    else:
        dic = {}
        dic["name"] = user['name']
        dic['hobby_list'] = [user['hobby']]
        result.append(dic)
print(result)

但我看了好幾遍上面的代碼和再審題好幾遍,我想到一個解決思路

思路如下:

我通過結果發現結果里有列表、字典,還有就是name和hobby相對來說可以是組成一個鍵值對

名字和愛好可以組成另一個鍵值對,所以我想到了把名字愛好放到一個字典中,最後來再變成值

具體代碼如下:

def main(user_list):
    #有結果可知,我們需要字典和列表,所以先設dict和list
    dict={}
    list=[]
    for i in user_list:#這裡通過for迴圈先把原列表中的字典提出來
        dict.setdefault(i['name'],[]).append(i['hobby'])#這裡通過字典的setdefault的性質來把名字去重
    for k,v in dict.items():#這裡通過for迴圈把上一步字典里的名字和愛好分開變成值
        list.append({'name':k,'hobby_list':v})#這裡把名字和愛好變成的鍵變成字典里'name'和'hobby_list'的值
    return list
print(main(
[
    {"name": "alex","hobby":"抽煙"},
    {"name" :"alex","hobby":"喝酒"},
    {"name" :"alex","hobby":"燙頭"},
    {"name":"wusir","hobby":"喊麥"},
    {"name":"wusir","hobby":"街舞"},
]
))

總結:寫代碼要看清要求是什麼,不一定要順著推,可以逆著推,有結果推出來,這樣也或許可以解決問題


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.1 JdbcTemplate概述 : 它是spring框架中提供的一個對象,是對原始JdbcAPI對象的簡單封裝.spring框架為我們提供了很多的操作模板類. ORM持久化技術 模板類 JDBC org.springframework.jdbc.core.J... ...
  • 1.1 AOP概述 1.1.1 什麼是AOP? AOP : 全稱是Aspect Oriented Progamming既 : 面向切麵編程.通過預編譯方式和運行期動態代理實現程式功能的統一維護的一種技術. 簡單的說它就是把我們程式重覆的代碼抽取出來,在需要執行的時候,使用動態代理的技術,在不修改源碼... ...
  • 1.1 基於註解的IOC配置 既註解配置和xml配置要實現的功能都是一樣的,都是要降低程式間的耦合.只是配置的形式不一樣. 1.2 環境搭建 1.2.1 第一步:拷貝必備的jar包 需要多拷貝一個spring-aop-4.2.4.RELEASE.jar 1.2.2 創建xml文件,導入約束 ... ...
  • 一 URL配置 "Django 1.11版本 URLConf官方文檔" URL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL與要為該URL調用的視圖函數之間的映射表。你就是以這種方式告訴Django,對於這個URL調用這段代碼,對於那個URL調用那段代碼。 基本格式 註意 ...
  • 一 web框架的本質及自定義web框架 我們可以這樣理解:所有的Web應用本質上就是一個socket服務端,而用戶的瀏覽器就是一個socket客戶端,基於請求做出響應,客戶都先請求,服務端做出對應的響應,按照http協議的請求協議發送請求,服務端按照http協議的響應協議來響應請求,這樣的網路通信, ...
  • 一、創建一個學生類 每個學生都有學號信息,但是每一個學生的學號都是不同的,所以要訪問這個學號必須先創建對象,通過對象去訪問學號信息,學號信息不能直接通過“類”去訪問,所以這種成員變數又被稱為“實例變數” 註意: (1)對象又被稱為實例,實例變數又被稱為對象變數(對象級別的變數) (2)不創建對象,這 ...
  • 除了基本的docker pull、docker image、docker ps,還有一些命令及參數也很重要,在此記錄下來避免遺忘。 環境信息 以下是本次操作的環境: 1. 操作系統:CentOS Linux release 7.7.1908 2. Docker:19.03.2 假設當前環境正運行著兩 ...
  • PHP開啟目錄引索 一. 前言 不知為何對nginx情有獨鍾, 最近練習php, 為了方便寫代碼, 便想要開啟nginx的目錄索引功能, 顯然不如Apache開啟的方便, 幾次嘗試都崩了... 我這個小白確實有點看不懂nginx的配置文件. 不過最後還是成功了, 記錄一下, 萬一哪天忘了, 回來看看 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...