これら2つのリストがある場合:
la = [1, 2, 3]
lb = [4, 5, 6]
次のようにそれらを繰り返し処理できます。
for i in range(min(len(la), len(lb))):
print la[i], lb[i]
またはもっとPython的に
for a, b in Zip(la, lb):
print a, b
辞書が2つある場合はどうなりますか?
da = {'a': 1, 'b': 2, 'c': 3}
db = {'a': 4, 'b': 5, 'c': 6}
繰り返しますが、私は手動で繰り返すことができます:
for key in set(da.keys()) & set(db.keys()):
print key, da[key], db[key]
次のように繰り返すことができる組み込みメソッドはありますか?
for key, value_a, value_b in common_entries(da, db):
print key, value_a, value_b
これを行うことができる組み込み関数またはメソッドはありません。ただし、独自に簡単に定義できます。
_def common_entries(*dcts):
for i in set(dcts[0]).intersection(*dcts[1:]):
yield (i,) + Tuple(d[i] for d in dcts)
_
これは、ユーザーが提供する「手動方式」に基づいていますが、Zip
と同様に、任意の数の辞書に使用できます。
_>>> da = {'a': 1, 'b': 2, 'c': 3}
>>> db = {'a': 4, 'b': 5, 'c': 6}
>>> list(common_entries(da, db))
[('c', 3, 6), ('b', 2, 5), ('a', 1, 4)]
_
1つの辞書のみが引数として提供される場合、基本的にdct.items()
を返します。
_>>> list(common_entries(da))
[('c', 3), ('b', 2), ('a', 1)]
_
Python Set type。を使用して、交差点を作成できます。
da = {'a': 1, 'b': 2, 'c': 3, 'e': 7}
db = {'a': 4, 'b': 5, 'c': 6, 'd': 9}
dc = set(da) & set(db)
for i in dc:
print i,da[i],db[i]
乾杯、
K.
ディクショナリキービュー は、Python 3.で既に設定されています。set()
を削除できます。
for key in da.keys() & db.keys():
print(key, da[key], db[key])
In Python 2:
for key in da.viewkeys() & db.viewkeys():
print key, da[key], db[key]
誰かが一般的なソリューションを探している場合:
import operator
from functools import reduce
def Zip_mappings(*mappings):
keys_sets = map(set, mappings)
common_keys = reduce(set.intersection, keys_sets)
for key in common_keys:
yield (key,) + Tuple(map(operator.itemgetter(key), mappings))
または、キーを値から分離し、次のような構文を使用する場合
for key, (values, ...) in Zip_mappings(...):
...
最後の行を
yield key, Tuple(map(operator.itemgetter(key), mappings))
from collections import Counter
counter = Counter('abra')
other_counter = Counter('kadabra')
last_counter = Counter('abbreviation')
for (character,
frequency, other_frequency, last_frequency) in Zip_mappings(counter,
other_counter,
last_counter):
print('character "{}" has next frequencies: {}, {}, {}'
.format(character,
frequency,
other_frequency,
last_frequency))
私たちに与えます
character "a" has next frequencies: 2, 3, 2
character "r" has next frequencies: 1, 1, 1
character "b" has next frequencies: 1, 1, 2
(Python 2.7.12
およびPython 3.5.2
でテスト済み)