[解決済み] dict のキーと値を `unicode` から `str` に変換する最速の方法とは?
2023-06-01 23:28:49
質問
ある層からdictを受け取り、それを別の層に渡す前に計算や変更を行います。元のdictのキーとquot;文字列の値は次のとおりです。
unicode
ですが、渡されるレイヤーは
str
.
これは頻繁に呼び出されることになるので、次のようなものを変換する最も速い方法を知りたいのです。
{ u'spam': u'eggs', u'foo': True, u'bar': { u'baz': 97 } }
...する。
{ 'spam': 'eggs', 'foo': True, 'bar': { 'baz': 97 } }
...非"文字列"値は、それらの元の型のままである必要があることに留意してください。
何か考えはありますか?
どのように解決するのですか?
DATA = { u'spam': u'eggs', u'foo': frozenset([u'Gah!']), u'bar': { u'baz': 97 },
u'list': [u'list', (True, u'Maybe'), set([u'and', u'a', u'set', 1])]}
def convert(data):
if isinstance(data, basestring):
return str(data)
elif isinstance(data, collections.Mapping):
return dict(map(convert, data.iteritems()))
elif isinstance(data, collections.Iterable):
return type(data)(map(convert, data))
else:
return data
print DATA
print convert(DATA)
# Prints:
# {u'list': [u'list', (True, u'Maybe'), set([u'and', u'a', u'set', 1])], u'foo': frozenset([u'Gah!']), u'bar': {u'baz': 97}, u'spam': u'eggs'}
# {'bar': {'baz': 97}, 'foo': frozenset(['Gah!']), 'list': ['list', (True, 'Maybe'), set(['and', 'a', 'set', 1])], 'spam': 'eggs'}
前提条件
- collections モジュールをインポートし、それが提供する抽象的な基本クラスを利用することができる。
-
デフォルトのエンコーディングを使用して変換することに満足している (
data.encode('utf-8')
ではなくstr(data)
を使用します)。
他のコンテナタイプをサポートする必要がある場合、パターンに従ってそれらのためのケースを追加する方法が明らかであることを望みます。
関連
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Python 3で文字列をバイトに変換する最良の方法?
-
[解決済み] リストに値が存在するかどうかを確認する最速の方法
-
[解決済み] Pandasのデータフレームから行を選択するために値のリストを使用する
-
[解決済み] 2つのディクショナを結合する(両方に現れるキーの値を追加する)pythonicな方法はありますか?
-
[解決済み】文字列から句読点を除去する最適な方法
-
[解決済み】PHPで文字列を整数に変換する最速の方法
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonでアスタリスク*は何を意味するのですか?[重複しています]。
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例