0

特定の基準に基づいて dict_values を比較したい 2 つの辞書があります。たとえば、それぞれの dict_values のインデックス 0 と 2 の値は、等しいと見なされるには同じでなければなりません。

このコードは機能します:

a = dict()
b = dict()
a[1,3] = 5, 6, 7
b[1,4] = 5, 9, 7
a_tuple = (list(a.values()))[0]
b_tuple = (list(b.values()))[0]
if a_tuple[0] == b_tuple[0] and a_tuple[2] == b_tuple[2]:
   print('Equal')

これを行うためのより短い/効率的な方法はありますか?.

前もって感謝します!

ジョン

4

2 に答える 2

1

これがはるかに優れているかどうかはわかりませんが、次のように動作するはずです。

import operator
import sys

py3k = sys.version_info[0] > 2

a = dict()
b = dict()
a[1,3] = 5, 6, 7
b[1,4] = 5, 9, 7

if(py3k):
  a_tuple = next(iter(a.values()))
  b_tuple = next(iter(b.values()))
else:
  a_tuple = a.values()[0]
  b_tuple = b.values()[0]

cmp_key=operator.itemgetter(0,2)
if cmp_key(a_tuple) == cmp_key(b_tuple):
  print('Equal')

比較はもう少しきれいで、Python 3 を使用している場合、辞書の最初のタプルを取得するためにnextandを使用します。iter

もちろん、より良い解決策は、データ構造を変更することです。これにより、常に 1 つの項目しか持たない辞書を扱う必要がなくなります。

于 2012-07-20T19:34:49.597 に答える
0

大きな違いはありません。私が見つけた唯一の最適化は a_tuple = a.values()[0] b_tuple = b.values()[0]

実際には dict.values はタプルのみを提供します。リストに変換してからタプルに変換しています

于 2012-07-20T19:35:50.263 に答える