简体   繁体   English

对文本文件中的字典列表进行排序

[英]sorting a list of dictionaries in a text file

I currently have a list of arrays which include a list of dictionaries in a text file.我目前有一个 arrays 列表,其中包括一个文本文件中的字典列表。 I have attempted to import json to use that inbuilt function however it didn't work with the format of the text file.我试图导入 json 以使用内置的 function 但它不适用于文本文件的格式。 Any suggestions on how to make it work.有关如何使其工作的任何建议。 My other strategy involved manually filtering the values however I hit a snag since "bankroll" is mentioned in both public and private.我的其他策略涉及手动过滤值但是我遇到了障碍,因为在公共和私人中都提到了“资金”。

    bankroll=[]
with open("abc.txt", "r") as b:
    lines=b.readlines()
for line in lines:
    if "bankroll" in line:
        key, value = [x.strip() for x in line.strip().split(':', 1)]
        bankroll.append[value]

[
{
    "private": {
        "bankroll": 1000,
        "last_bid": 0,
        "launching": false,
        "name": "abc",
        "tech": 0
    },
    "public": {
        "auction_round": 0,
        "game_stage": "start",
        "last_mining_payoff": 0,
        "last_winning_bid": 0,
        "last_winning_bidders": [],
        "last_winning_miner": "",
        "max_rounds": 201,
        "players": {
            "AggressiveLauncher": {
                "bankroll": 1000
            },
            "abc": {
                "bankroll": 1000
            },
            "PassiveLauncher": {
                "bankroll": 1000
            },
            "def": {
                "bankroll": 1000
            },
            "SpongeBob": {
                "bankroll": 1000
            }
        },
        "round": 0
    }
},

Above is an example of a singular element of many, in one of many arrays in the text file.上面是许多单数元素的示例,在文本文件中的许多 arrays 之一。

Using json should be straightforward:使用json应该很简单:

>>> lines = '''
[
   {
    "private": {
        "bankroll": 1000,
        "last_bid": 0,
        "launching": false,
        "name": "abc",
        "tech": 0
    },
    "public": {
        "auction_round": 0,
        "game_stage": "start",
        "last_mining_payoff": 0,
        "last_winning_bid": 0,
        "last_winning_bidders": [],
        "last_winning_miner": "",
        "max_rounds": 201,
        "players": {
            "AggressiveLauncher": {
                "bankroll": 1000
            },
            "abc": {
                "bankroll": 1000
            },
            "PassiveLauncher": {
                "bankroll": 1000
            },
            "def": {
                "bankroll": 1000
            },
            "SpongeBob": {
                "bankroll": 1000
            }
        },
        "round": 0
    }
},
{
    "private": {
        "bankroll": 1000,
        "last_bid": 0,
        "launching": false,
        "name": "abc",
        "tech": 0
    },
    "public": {
        "auction_round": 0,
        "game_stage": "start",
        "last_mining_payoff": 0,
        "last_winning_bid": 0,
        "last_winning_bidders": [],
        "last_winning_miner": "",
        "max_rounds": 201,
        "players": {
            "AggressiveLauncher": {
                "bankroll": 1000
            },
            "abc": {
                "bankroll": 1000
            },
            "PassiveLauncher": {
                "bankroll": 1000
            },
            "def": {
                "bankroll": 1000
            },
            "SpongeBob": {
                "bankroll": 1000
            }
        },
        "round": 0
    }
}]
'''
>>>import json
>>>
>>> list_lines = json.loads(lines)
>>> 
>>> list_lines[0]
{'private': {'tech': 0, 'last_bid': 0, 'bankroll': 1000, 'name': 'abc', 'launching': False}, 'public': {'auction_round': 0, 'round': 0, 'max_rounds': 201, 'game_stage': 'start', 'last_mining_payoff': 0, 'last_winning_bid': 0, 'last_winning_miner': '', 'last_winning_bidders': [], 'players': {'PassiveLauncher': {'bankroll': 1000}, 'def': {'bankroll': 1000}, 'AggressiveLauncher': {'bankroll': 1000}, 'abc': {'bankroll': 1000}, 'SpongeBob': {'bankroll': 1000}}}}
>>> list_lines[1]
{'private': {'tech': 0, 'last_bid': 0, 'bankroll': 1000, 'name': 'abc', 'launching': False}, 'public': {'auction_round': 0, 'round': 0, 'max_rounds': 201, 'game_stage': 'start', 'last_mining_payoff': 0, 'last_winning_bid': 0, 'last_winning_miner': '', 'last_winning_bidders': [], 'players': {'PassiveLauncher': {'bankroll': 1000}, 'def': {'bankroll': 1000}, 'AggressiveLauncher': {'bankroll': 1000}, 'abc': {'bankroll': 1000}, 'SpongeBob': {'bankroll': 1000}}}}
>>> 
>>> list_lines[1]['private']['bankroll']
1000

In your case, you can directly de-serialize from your file object, using json.load :在您的情况下,您可以使用json.load直接从文件 object 反序列化:

>>> with open("abc.txt", "r") as b:
        lines = json.load(b)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM