2 Soalan: Cari jika kekunci Kamus mengandungi item dalam Python

soalan dicipta di Wed, May 8, 2019 12:00 AM

Jika saya mempunyai kamus dan senarai berikut, apakah ada cara yang saya dapat melihat apakah item dalam senarai terkandung dalam kunci kamus?

Saya cuba membalikkan kamus dan melihat nilai-nilai, tetapi kekunci tidak mempunyai nilai yang sama sehingga ia merosakkan skema.

('dict', {'2D 4D': 0, '1B 2C': 0})
('list', ['2B', '2D', '3D', '4D', '4A'])

jadi apabila anda meminta sesuatu yang serupa dengan

if key in dict:  //if '2D' is in dict
dict[key]+=1     //{'2D 4D': 1}
    
1
  1. buat kamus tambahan dari dic asli seperti {'2D': ['2D 4D'], '4D': ['2D 4D'], '1B': ['1B 2C'], '2C': ['1B 2C']} dan gunakannya untuk mencari kunci di dic dic asal dengan mencari istilah.
    2019-05-08 15: 56: 04Z
2 Jawapan                              2                         

Anda boleh membandingkan setiap entri utama dict untuk semua dalam senarai anda. Untuk tujuan kod bersih, jangan gunakan dict/list sebagai nama var:

mdict = {'2D 4D': 0, '1B 2C': 0}
mlist = ['2B', '2D', '3D', '4D', '4A']
for k in mdict.keys():
    for e in mlist:
        if e in k:
            mdict[k] += 1
# mdict:
{'1B 2C': 0, '2D 4D': 2}

Jika anda mempunyai senarai besar perkataan atau entri bahasa, ini akan menjadi perlahan. Saya cadangkan untuk melaksanakan trie penyertaan senarai anda dan berulang dengan itu, yang akan mengurangkan kerumitan dari O (M * N) ke O (N + M).

    
2
2019-05-08 15: 54: 19Z
  1. adakah ada cara untuk mengira jumlah item dalam kunci? ya len(2D 4D) = 2?
    2019-05-08 16: 02: 23Z
  2. print ([(key, len (key.split (''))) untuk key in mdict.keys ()]) @WilliamMerritt
    2019-05-08 16: 16: 37Z
  3. Untuk menambah kepada @ncica, jika senarai anda mengandungi banyak pendua, anda boleh melakukan collections.Counter(mlist) terlebih dahulu dan kemudian berulang atas kunci, menjimatkan tan masa.
    2019-05-08 17: 46: 40Z

Jika kunci dict dianggap berada di jalan yang mempunyai ruang di tengah, anda boleh menggunakannya juga.

a = {'2D 4D': 0, '1B 2C': 0}
b = ['2B', '2D', '3D', '4D', '4A']
for i in a.keys():
    a[i]=len(set(i.split()).intersection(b))

OUTPUT:

 {'2D 4D': 2, '1B 2C': 0}
    
0
2019-05-08 16: 17: 52Z
sumber diletakkan di sini