簡體   English   中英

根據Python中的值對字典進行排序

[英]Sort dictionary based on values in Python

我想在Twitter網絡中找到“機器人”。 所以,我首先手動將Twitter用戶標記為機器人,然后我想循環其朋友和粉絲。 我有以下腳本:

def get_bot_network(target):
    global interactions
    bot_friends = []
    bot_followers = []
    friends = get_friends_ids(target, a)
    followers = get_followers_ids(target, a)

    if target not in interactions:
       interactions[target] = Counter()
       if len(friends) > 0:
          bot_friends = get_bots_from_ids(friends)
             if bot_friends is not None and len(bot_friends) > 0:
                for bot_friend in bot_friends:
                   interactions[target][bot_friend] = 'Friend'

    if len(followers) > 0:
       bot_followers = get_bots_from_ids(followers)
       if bot_followers is not None and len(bot_followers) > 0:
          for bot_follower in bot_followers:
             interactions[target][bot_follower] = 'Follower'

   save_json(interactions, 'bots/interactions.json')
   return bot_friends, bot_followers

哪里

def save_json(variable, filename):
    with io.open(filename, 'w', encoding='utf-8') as f:
       f.write(str(json.dumps(variable, indent=4, ensure_ascii=False)))

如果我們舉個例子

bot_followers等於:

['1103608560468975616', '1103607026645590016', '1103586971706810368', '1103586464942575617', '1103586148004257792', '1103574979868676096', '1103574280392957960', '1103573913122947072', '1103573645140488192']

bot_friends相等

['1103574280392957960', '1103573913122947072', '1103573645140488192', '1103573218227499008', '1103569167226028033']

我希望以下輸出: 編輯:我現在看到標簽不正確。 請關注排序!

 { "1103572731168096258": { "1103573218227499008": "Friend", "1103569167226028033": "Friend", "1103574280392957960": "Follower", "1103573913122947072": "Follower", "1103573645140488192": "Follower", "1103608560468975616": "Follower", "1103607026645590016": "Follower", "1103586971706810368": "Follower", "1103586464942575617": "Follower", "1103586148004257792": "Follower", "1103574979868676096": "Follower" } } 

但最終的輸出是:

 { "1103572731168096258": { "1103574280392957960": "Follower", "1103573913122947072": "Follower", "1103573645140488192": "Follower", "1103573218227499008": "Friend", "1103569167226028033": "Friend", "1103608560468975616": "Follower", "1103607026645590016": "Follower", "1103586971706810368": "Follower", "1103586464942575617": "Follower", "1103586148004257792": "Follower", "1103574979868676096": "Follower" } } 

Q1:我的“默認排序”究竟出了什么問題?

Q2:如果有bot_friendsbot_followers ,我怎么能刪除空的Counter()

對你當前的輸出進行排序是否是一個可接受的解決方案(對我來說最好,所以我不必弄亂產生所述輸出的腳本)? 你可以這樣做:

my_dict = {
  "1103572731168096258": {
    "1103574280392957960": "Follower",
    "1103573913122947072": "Follower",
    "1103573645140488192": "Follower",
    "1103573218227499008": "Friend",
    "1103569167226028033": "Friend",
    "1103608560468975616": "Follower",
    "1103607026645590016": "Follower",
    "1103586971706810368": "Follower",
    "1103586464942575617": "Follower",
    "1103586148004257792": "Follower",
    "1103574979868676096": "Follower"
}}

for key in my_dict.keys():
    sorted_dict = sorted(my_dict[key].items())
    for item in sorted_dict:
        print(item)

輸出:

('1103569167226028033', 'Friend')
('1103573218227499008', 'Friend')
('1103573645140488192', 'Follower')
('1103573913122947072', 'Follower')
('1103574280392957960', 'Follower')
('1103574979868676096', 'Follower')
('1103586148004257792', 'Follower')
('1103586464942575617', 'Follower')
('1103586971706810368', 'Follower')
('1103607026645590016', 'Follower')
('1103608560468975616', 'Follower')

這是按第一列排序,但看起來與預期的輸出塊非常相似。

你想要collections OrderedDict

from collections import OrderedDict

d = {
    "1103574280392957960": "Follower",
    "1103573913122947072": "Follower",
    "1103573645140488192": "Follower",
    "1103573218227499008": "Friend",
    "1103569167226028033": "Friend",
    "1103608560468975616": "Follower",
    "1103607026645590016": "Follower",
    "1103586971706810368": "Follower",
    "1103586464942575617": "Follower",
    "1103586148004257792": "Follower",
    "1103574979868676096": "Follower"
}

# dictionary sorted by key
dd = OrderedDict(sorted(d.items(), key=lambda t: t[0]))

並輸出:

OrderedDict([('1103569167226028033', 'Friend'),
             ('1103573218227499008', 'Friend'),
             ('1103573645140488192', 'Follower'),
             ('1103573913122947072', 'Follower'),
             ('1103574280392957960', 'Follower'),
             ('1103574979868676096', 'Follower'),
             ('1103586148004257792', 'Follower'),
             ('1103586464942575617', 'Follower'),
             ('1103586971706810368', 'Follower'),
             ('1103607026645590016', 'Follower'),
             ('1103608560468975616', 'Follower')])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM