24

与えられた:

dict = {"path": "/var/blah"}
curr = "1.1"
prev = "1.0"

文字列を補間して次のものを生成するための最良/最短の方法は何ですか:

パス: /var/blah 現在: 1.1 前: 1.0

私はこれが機能することを知っています:

str = "path: %(path)s curr: %(curr)s prev: %(prev)s" % {"path": dict["path"],"curr": curr, "prev": prev}

しかし、次のようなより短い方法があることを望んでいました。

str = "path: %(path)s curr: %s prev: %s" % (dict, curr, prev)

これが過度に衒学的な質問のように思われる場合は、お詫び申し上げます。

4

8 に答える 8

57

これを試すことができます:

data = {"path": "/var/blah",
        "curr": "1.1",
        "prev": "1.0"}

s = "path: %(path)s curr: %(curr)s prev: %(prev)s" % data
于 2009-08-20T05:20:28.913 に答える
28

もちろん、新しい (2.6 以降の) .format文字列メソッドを使用することもできます。

>>> mydict = {"path": "/var/blah"}
>>> curr = "1.1"
>>> prev = "1.0"
>>>
>>> s = "path: {0} curr: {1} prev: {2}".format(mydict['path'], curr, prev)
>>> s
'path: /var/blah curr: 1.1 prev: 1.0'   

または、すべての要素がディクショナリにある場合は、次のようにすることができます。

>>> mydict = {"path": "/var/blah", "curr": 1.1, "prev": 1.0}
>>> "path: {path} curr: {curr} prev: {prev}".format(**mydict)
'path: /var/blah curr: 1.1 prev: 1.0'
>>>

str.format()ドキュメントから:

この文字列フォーマットの方法は、Python 3.0 の新しい標準であり、新しいコードでの文字列フォーマット操作で説明されている % フォーマットよりも優先されるべきです。

于 2009-08-20T07:17:00.550 に答える
18

なぜだめですか:

mystr = "path: %s curr: %s prev: %s" % (mydict[path], curr, prev)

ところで、組み込みの名前を踏みにじって使用していたいくつかの名前を変更しました-そうしないでください。それは決して必要ではなく、時々、それが引き起こす不正行為を追跡するのに多くの時間を無駄にします(何かが使用している場所)ビルトイン名はビルトインを意味すると仮定していますが、独自の変数の名前で非表示にしています)。

于 2009-08-20T05:16:38.203 に答える
13

多分:

path = dict['path']
str = "path: %(path)s curr: %(curr)s prev: %(prev)s" % locals()

私はそれが機能することを意味します:

>>> dict = {"path": "/var/blah"}
>>> curr = "1.1"
>>> prev = "1.0"
>>> path = dict['path']
>>> str = "path: %(path)s curr: %(curr)s prev: %(prev)s" % locals()
>>> str
'path: /var/blah curr: 1.1 prev: 1.0'

あなたがそれをより短いと考えるかどうかはわかりません。

于 2009-08-20T05:03:33.440 に答える
8

また、(間もなく) Python 3.6 でf-stringsを使用することもできます。これは、おそらく文字列をフォーマットする最短の方法です。

print(f'path: {path} curr: {curr} prev: {prev}')

さらに、すべてのデータを dict 内に配置します。

d = {"path": path, "curr": curr, "prev": prev}
print(f'path: {d["path"]} curr: {d["curr"]} prev: {d["prev"]}')
于 2015-12-04T18:37:34.413 に答える
4

データをディクショナリ内に配置すると、次のことができます。

data = {"path": "/var/blah","curr": "1.1","prev": "1.0"}

"{0}: {path}, {1}: {curr}, {2}: {prev}".format(*data, **data)
于 2013-04-19T00:12:17.497 に答える
2

2016年更新: Python 3.6以降、変数を名前で文字列に置き換えることができます:

>>> origin = "London"
>>> destination = "Paris"
>>> f"from {origin} to {destination}"
'from London to Paris'

f"プレフィックスに注意してください。これを Python 3.5 以前で試すと、SyntaxError.

https://docs.python.org/3.6/reference/lexical_analysis.html#f-stringsを参照してください

于 2016-12-23T14:56:40.703 に答える
1

不変の変数を毎回辞書に追加したくない場合は、次の形式を使用して変数と辞書キーの両方を参照できます。

str = "path {path} curr: {curr} prev: {prev}".format(curr=curr, prev=prev, **dict)

論理的には悪い形かもしれませんが、それは curr と prev がほとんど静的で、辞書が更新されることを期待して物事をよりモジュール化します。

于 2016-05-31T13:44:50.867 に答える