2 Tra cứu nếu khóa Từ điển chứa các mục trong Python

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Nếu tôi có từ điển và danh sách sau đây, có cách nào tôi có thể tìm kiếm là các mục trong danh sách được chứa trong các khóa của từ điển không?

Tôi đã thử đảo ngược từ điển và tìm kiếm các giá trị, nhưng các khóa không thể có cùng các giá trị để nó làm rối lược đồ.

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

vì vậy khi bạn hỏi điều gì đó tương tự

if key in dict:  //if '2D' is in dict
dict[key]+=1     //{'2D 4D': 1}
    
1
  1. tạo từ điển bổ sung từ dic gốc như {'2D': ['2D 4D'], '4D': ['2D 4D'], '1B': ['1B 2C'], '2C': ['1B 2C']} và sử dụng nó để tra cứu các khóa trong dic gốc theo thuật ngữ tìm kiếm.
    2019-05-08 15: 56: 04Z
2 Câu trả lời                              2                         

Bạn có thể so sánh từng mục nhập khóa chính với tất cả trong danh sách của mình. Đối với mục đích mã sạch, không sử dụng dict/list làm tên 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}

Nếu bạn có một danh sách lớn các từ hoặc mục từ điển, việc này sẽ chậm. Tôi khuyên bạn nên triển khai trie của các mục trong danh sách của bạn và lặp lại với điều đó, điều này sẽ làm giảm sự phức tạp từ O (M * N) đến O (N + M).

    
2
2019-05-08 15: 54: 19Z
  1. có cách nào để đếm số lượng vật phẩm trong khóa không? tức là len(2D 4D) = 2?
    2019-05-08 16: 02: 23Z
  2. print ([(key, len (key.split (''))) cho khóa trong mdict.keys ()]) @WilliamMerritt
    2019-05-08 16: 16: 37Z
  3. Để thêm vào @ncica, nếu danh sách của bạn chứa nhiều bản sao , bạn có thể thực hiện collections.Counter(mlist) trước rồi lặp qua các phím tiết kiệm hàng tấn thời gian.
    2019-05-08 17: 46: 40Z

Nếu các khóa của dict được giả sử là theo cách có khoảng trắng ở giữa, bạn cũng có thể sử dụng phím này.

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))

ĐẦU RA:

 {'2D 4D': 2, '1B 2C': 0}
    
0
2019-05-08 16: 17: 52Z
nguồn đặt đây