第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何按第三個字符串的一部分對字符串列表進(jìn)行排序?

如何按第三個字符串的一部分對字符串列表進(jìn)行排序?

qq_笑_17 2021-12-21 16:41:45
初學(xué)者在這里:我正在嘗試對同一行中相應(yīng)國家/地區(qū)的昵稱列表進(jìn)行排序。它們采用以下格式:FODORGBR + HU-Szombathely-2ZSOLDPTE + HU-Debrecen-3THAUSKTR + DE-Herzogenaurach-1WRIGHNIL + UK-SuttonColdfield-2KUROTADR + SK-KysuckeNoveMesto-1KLERNMTT + DE-Herzogenaurach-1BIRKNJHA + DE-Erlangen-111CANECVAD + SK-KysuckeNoveMesto-1MALDESND + DE-Herzogenaurach-1我想按國家首字母(如 HU、DE 等)對其進(jìn)行排序,并附上說明。所以像:DE:THAUSKTRKLERNMTTBIRKNJHAMALDESNDHU:FODORGBR ZSOLDPTE這就是我想出的定義國家的方法,但我不知道如何用它對所有行進(jìn)行排序。fw = open("NameList.txt")for line_fw in fw:    if not line_fw.strip():        continue    cross = line_fw.find("+")    country = line_fw[cross+2:cross+4]
查看完整描述

3 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個贊

使用re.search和collections.defaultdict:


import re

from collections import defaultdict


d = defaultdict(list)

with open('NameList.txt') as fw:

    for line in fw:

        code = re.search(' (\w{2})-', line).group(1)

        nick = re.search('(\w{8}) +', line).group(1)

        d[code].append(nick)

輸出:


defaultdict(list,

            {'DE': ['THAUSKTR', 'KLERNMTT', 'BIRKNJHA', 'MALDESND'],

             'HU': ['FODORGBR', 'ZSOLDPTE'],

             'SK': ['KUROTADR', 'CANECVAD'],

             'UK': ['WRIGHNIL']})


查看完整回答
反對 回復(fù) 2021-12-21
?
侃侃無極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個贊

首先拆分列表" "并用于operator.itemgetter迭代列表的最后一個元素。


或更換-1在itemgetter用3,如果國家代碼始終是列表中的第三個元素。


from operator import itemgetter


x = ["FODORGBR + HU-Szombathely-2","ZSOLDPTE + HU-Debrecen-3","THAUSKTR + DE-Herzogenaurach-1",

"WRIGHNIL + UK-SuttonColdfield-2","KUROTADR + SK-KysuckeNoveMesto-1","KLERNMTT + DE-Herzogenaurach-1",

"BIRKNJHA + DE-Erlangen-111","CANECVAD + SK-KysuckeNoveMesto-1","MALDESND + DE-Herzogenaurach-1"]


new_list = [i.split() for i in x]

new_list.sort(key=itemgetter(-1))


print([" ".join(i) for i in new_list])

輸出:


['BIRKNJHA + DE-Erlangen-111', 'THAUSKTR + DE-Herzogenaurach-1', 'KLERNMTT + DE-Herzogenaurach-1', 'MALDESND + DE-Herzogenaurach-1', '

ZSOLDPTE + HU-Debrecen-3', 'FODORGBR + HU-Szombathely-2', 'KUROTADR + SK-KysuckeNoveMesto-1', 'CANECVAD + SK-KysuckeNoveMesto-1', 'WRI

GHNIL + UK-SuttonColdfield-2']


查看完整回答
反對 回復(fù) 2021-12-21
?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個贊

您用于查找國家/地區(qū)名稱的代碼看起來很好。處理文件時的一條建議:使用with- 語句而不是openand close。使用時open,在close調(diào)用之前的某個時間發(fā)生錯誤,可能是文件沒有正確關(guān)閉,這可能會搞砸各種事情。with無論相應(yīng)的代碼塊內(nèi)發(fā)生什么,都會關(guān)閉文件(它的工作原理類似于try - finally,請參閱上面的鏈接了解更多信息)。所以,像這樣:


with open('NameList.txt', 'r') as fw:

    for line_fw in fw:

        ...

確保該文件將始終關(guān)閉。順便說一句,line.find('+')您可以只使用,而不是使用line.split('+'),這會帶走整個字符串切片部分。


現(xiàn)在,對于您的問題:這里有幾種可能性可以使用。最簡單的方法是為每個國家/地區(qū)定義一個列表,并將相應(yīng)的名稱附加到正確的列表中:


de = []

hu = []

uk = []

sk = []


with open('NameList.txt', 'r') as fw:

    for line_fw in fw:

        if not line_fw.strip():

            continue

        country = line_fw.split('+')[1].split('-')[0].strip()

        nickname = line_fw.split('+')[0]

        if country == 'DE':

            de.append(nickname)

        elif country == 'HU':

            hu.append(nickname)

        elif country == 'UK':

            uk.append(nickname)

        else:

            sk.append(nickname)

這將返回每個國家/地區(qū)的列表,其中包含相應(yīng)的昵稱。但是,如您所見,這非常笨重且冗長。一個更優(yōu)雅的解決方案是使用以國家作為鍵和名稱列表作為值的字典:


d = {}


with open('NameList.txt', 'r') as fw:

    for line_fw in fw:

        if not line_fw.strip():

            continue

        country = line_fw.split('+')[1].split('-')[0].strip()

        nickname = line_fw.split('+')[0].strip()

        try:

            d[country].append(nickname)  # if country already exists in d, append the nickname

        except KeyError:

            d[country] = [nickname]  # if country doesn't exist in d, make a new entry

這將創(chuàng)建一個看起來像這樣的字典(我只是用前幾行來說明它):


{'HU': ['FODORGBR', 'ZSOLDPTE'], 'DE': ['THAUSKTR'], 'UK': ['WRIGHNIL']}

現(xiàn)在,有更優(yōu)雅的提取國家和昵稱的解決方案,但其中一些已在其他答案中指出。


最后,如果我猜對了,您想將結(jié)果寫入新文件,或者至少打印它們。假設(shè)您有一個上述形式的字典。只需通過 迭代它的鍵for k in d:,在它們之間添加一些換行符 ( '\n') 并用于join將列表轉(zhuǎn)換為一個字符串,所有項目之間都帶有換行符:


for k in d:

    print(k + ':\n' + '\n'.join(d[k]) + '\n')

這將打?。?/p>


HU:

FODORGBR 

ZSOLDPTE 


DE:

THAUSKTR 


UK:

WRIGHNIL 

通過添加with open(outputfile, 'w') as f:和更換print用f.write,你可以很容易地寫一個新的文件。


查看完整回答
反對 回復(fù) 2021-12-21
  • 3 回答
  • 0 關(guān)注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號