簡體   English   中英

從字典生成字符串

[英]Generating string from a dictionary

假設我有這樣的事情:

counts = {"chuck" : 1 , "annie" : 42, "jan" : 100}
lst = list(counts.keys())
lst.sort()
for key in lst:
    print(key, counts[key])

輸出將是

chuck 1
annie 42
jan 100

如果我想使用字符串來實現此效果,則該字符串將表示為

"chuck 1\nannie 42\njan 100\n"

現在,如果我想完成此字符串,可以嘗試執行以下操作:

for key, value in counts.items():
    if value == 1:
        counts[key] = "1\n"
    elif value == 42:
        counts[key] = "42\n"
    elif value == 100:
        counts[key] = "100\n"

temp = list(counts.items())
temp.sort()
myStr = str(temp)

for char in myStr:
    if char in "[(',)]":
        myStr = myStr.replace(char,'')

finalStr = "" + myStr[0:19] + "" + myStr[20:37] + "" + myStr[38:53] + ""

但是,是的,我想我太復雜了……什么是更好和簡單的方法?

謝謝!

您可以通過將每個key, value格式化為您期望的每個"{} {}".format(key, value) string格式來實現"{} {}".format(key, value)

然后,加入“ \\ n”:

"\n".join(["{} {}".format(key, value) for key, value in counts.items()])

演示:

輸入:

counts = {"chuck" : 1 , "annie" : 42, "jan" : 100}

輸出:

jan 100
chuck 1
annie 42

注意sorted是一項要求,因此這里是排序:

"\n".join(["{} {}".format(key, value) for key, value in sorted(counts.items())])

輸出:

annie 42
chuck 1
jan 100

簡潔排序:

>>> '\n'.join(sorted([k+' '+str(v) for k, v in counts.items())])
'annie 42\nchuck 1\njan 100'

排序行而不是項目。 實際上,通過%timeit衡量,這種方法更快。

這有點笨拙:

'\n'.join(["{0} {1}".format(a,b) for a,b in counts.items()])

如果您要簡潔。

d = {"chuck" : 1 , "annie" : 42, "jan" : 100}

'\n'.join('{} {}'.format(*item) for item in sorted(d.items()))
d = {"chuck" : 1 , "annie" : 42, "jan" : 100};
s = '\n'.join(['%s %s' % (key, value) for (key, value) in sorted(d.items(), key=lambda x: x[1])])
print(s) # 'chuck 1\nannie 42\njan 100'

d = {"chuck" : 1 , "annie" : 42, "jan" : 100};
s = '\n'.join(['%s %s' % (key, value) for (key, value) in sorted(d.items(), key=lambda x: x[0])])
print(s) # 'annie 42\nchuck 1\njan 100'

暫無
暫無

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

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