辞書を文字列に変換したいと思います。初心者レベルの質問は、私が付着しなければならないいくつかのルールによって複雑さは何を次のようになります。辞書キーを任意の順序で処理しています
- は特に出て来なければなら知らキーのリストがあり、任意の順序
- 知られているキーのそれぞれは任意ですすなわち、辞書に存在しない可能性があります。
- 既知のキーのうち少なくとも1つが辞書に存在することが保証されています。
- 辞書には追加のキーが含まれている可能性があります。彼らは後に知られているキーを来なければならないし、そのためには、私はキーが
他の人の前に、いくつかの辞書のキーを処理するニシキヘビの方法は何であるの辞書に追加される順序についての仮定を行うことができない
data = {
"tags": "one, two",
"slug": "post-title",
"date": "2017-02-01",
"title": "Post Title",
}
print(format_data(data))
data = {
"format": "book",
"title": "Another Post Title",
"date": "2017-02-01",
"slug": "another-post-title",
"custom": "data",
}
print(format_data(data))
Title: Post Title
Slug: post-title
Date: 2017-02-01
Tags: one, two
Title: Another Post Title
Slug: another-post-title
Date: 2017-02-01
Custom: data
Format: book
この機能が期待される結果を提供しないが
def format_data(input_data):
data = dict(input_data)
output = []
for key in ["title", "slug", "date", "modified", "category", "tags"]:
if key in data:
output.append("{}: {}".format(key.title(), data[key]))
del data[key]
if data:
for key in data:
output.append("{}: {}".format(key.title(), data[key]))
return "\n".join(output)
が、それは私がより良いアプローチがあるかもしれないと思わせるいくつかの問題があります。 はこれまでのところ、私は以下の機能を持っています。つまり、output.append()
行が複製され、入力データ構造がコピーされて副作用なしに変更が可能になります。
要約すると、特定の順序で、そして他のキーの前に、いくつかのキーをどのように処理できますか?
あなたの実装に特に問題はありません。 'if data:'は不要ですが、それはそれです。 – glibdud
反復している間に実際に 'del data [key]'したいのですか(それは悪い習慣です)、あるいはそれをして、既知のキーが2回以上反復されないようにしますか? – smci
入力がまだ辞書ではない場合(あなたの例では表現されていない)でない限り、 'dict(input_data)'を持つ必要はありません。 – skrrgwasme