[解決済み] Python タプル/辞書をキーに、セレクト、ソート
2022-09-06 05:01:23
質問
例えば、24本の青いバナナ、12個の緑のリンゴ、0個の青いイチゴなど、異なる色の果物の数量があるとする。 私はPythonで簡単に選択と並べ替えを可能にするデータ構造でそれらを整理したいと思います。私のアイデアは、それらをタプルをキーとする辞書に入れることでした、例えば。
{
('banana', 'blue' ): 24,
('apple', 'green'): 12,
('strawberry','blue' ): 0,
# ...
}
や、辞書でも、例えば
{
{'fruit': 'banana', 'color': 'blue' }: 24,
{'fruit': 'apple', 'color': 'green'}: 12,
{'fruit': 'strawberry','color': 'blue' }: 0,
# ...
}
例えば、すべての青い果物のリストや、すべての色のバナナを取得したり、果物の名前でこの辞書をソートしたいのですが、どうすればよいでしょうか?これをきれいに行う方法はありますか?
それは、タプルをキーとするディクショナリが 適切な の方法で処理する必要があります。
すべての提案を歓迎します。
どのように解決するのですか?
個人的に、私がPythonについて好きなことの1つは、タプルとディクトの組み合わせです。ここにあるのは事実上 2 次元配列 (x = 果物の名前、y = 色) で、私は一般に 2 次元配列を実装するためのタプルのディクテの支持者です、少なくとも次のような場合は。
numpy
やデータベースがより適切でない場合、2次元配列を実装するためのタプルのディクショナリーを一般的に支持しています。ですから、要するに、あなたは良いアプローチを持っていると思います。
ディクテをキーとして使うには、余分な作業をしなければならないので、あまり良い解決策とは言えないことに注意してください。
とはいえ、あなたはまた namedtuple() . そうすれば、こんなことができます。
>>> from collections import namedtuple
>>> Fruit = namedtuple("Fruit", ["name", "color"])
>>> f = Fruit(name="banana", color="red")
>>> print f
Fruit(name='banana', color='red')
>>> f.name
'banana'
>>> f.color
'red'
これでfruitcountのdictが使えるようになりました。
>>> fruitcount = {Fruit("banana", "red"):5}
>>> fruitcount[f]
5
その他のトリック
>>> fruits = fruitcount.keys()
>>> fruits.sort()
>>> print fruits
[Fruit(name='apple', color='green'),
Fruit(name='apple', color='red'),
Fruit(name='banana', color='blue'),
Fruit(name='strawberry', color='blue')]
>>> fruits.sort(key=lambda x:x.color)
>>> print fruits
[Fruit(name='banana', color='blue'),
Fruit(name='strawberry', color='blue'),
Fruit(name='apple', color='green'),
Fruit(name='apple', color='red')]
chmulligと同じように、ある果物のすべての色のリストを得るには、キーにフィルタをかける必要があります、すなわち。
bananas = [fruit for fruit in fruits if fruit.name=='banana']
関連
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] Pythonの「名前付きタプル」とは何ですか?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
最新
-
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でトライを作成する方法
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] Python Empty Generator 関数
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?