我目前有這個功能
def ndfa_as_str(ndfa: {str: {str: {str}}}) -> str:
ndfa_str = ""
sortedfa = sorted(ndfa.keys(), key=lambda x: x.lower())
for i in sortedfa:
ndfa_str = (" {} transitions: {}".format(i, list(sorted(ndfa[i].items()))) "\n")
return ndfa_str
ndfa = {
'end': {},
'start': {'1': {'start'}, '0': {'near', 'start'}},
'near': {'1': {'end'}}}
我的函式回傳:
" end transitions: []\\n near transitions: [(\'1\', {\'end\'})]\\n start transitions: [(\'0\', {\'near\', \'start\'}), (\'1\', {\'start\'})]\\n"'
但是我希望回傳:
" end transitions: []\\n near transitions: [(\'1\', [\'end\'])]\\n start transitions: [(\'0\', [\'near\', \'start\']), (\'1\', [\'start\'])]\\n"'
其中集合是串列。
我能做到這一點的最簡單方法是什么?
uj5u.com熱心網友回復:
我認為這可以滿足您的要求。它使用遞回嵌套輔助函式,這似乎是合適的,因為集合是嵌套的。它使用內置sorted()函式轉換遇到的任何集合。
from operator import itemgetter
def ndfa_as_str(ndfa):
getkey = lambda x: itemgetter(0)(x).lower()
def value_to_list(obj):
if isinstance(obj, dict):
return [(key, value_to_list(value))
for key, value in sorted(obj.items(), key=getkey)]
elif isinstance(obj, set):
return sorted(obj)
else:
return obj
lines = [f' {key} transitions: {value_to_list(value)}'
for key, value in sorted(ndfa.items(), key=getkey)]
return '\n'.join(lines)
ndfa = {
'end': {},
'start': {'1': {'start'}, '0': {'near', 'start'}},
'near': {'1': {'end'}}}
print(ndfa_as_str(ndfa))
列印結果:
end transitions: []
near transitions: [('1', ['end'])]
start transitions: [('0', ['near', 'start']), ('1', ['start'])]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/414406.html
標籤:
上一篇:決議串列中的Python字典
下一篇:Python串列理解PCEP問題
