Hướng dẫn can a tuple be a dictionary key in python? - bộ dữ liệu có thể là khóa từ điển trong python không?

Tôi đã nghiên cứu sự khác biệt giữa danh sách và bộ dữ liệu [trong Python]. Một điều hiển nhiên là các bộ dữ liệu là bất biến [các giá trị không thể thay đổi sau khi gán ban đầu], trong khi danh sách là có thể thay đổi.

Một câu trong bài viết có tôi:

Chỉ các yếu tố bất biến mới có thể được sử dụng làm khóa từ điển, và do đó chỉ có các bộ đếm và không phải danh sách có thể được sử dụng làm khóa.

Tôi có một thời gian khó khăn khi nghĩ về một tình huống mà tôi muốn sử dụng một bộ tuple làm khóa từ điển. Bạn có thể cung cấp một vấn đề ví dụ trong đó đây sẽ là giải pháp tự nhiên, hiệu quả, thanh lịch hoặc rõ ràng?

Edit:

Cảm ơn các ví dụ của bạn. Cho đến nay tôi nhận được rằng một ứng dụng rất quan trọng là bộ đệm của các giá trị chức năng.

QTMFLD

2.8062 Huy hiệu vàng19 Huy hiệu bạc36 Huy hiệu đồng2 gold badges19 silver badges36 bronze badges

Hỏi ngày 21 tháng 12 năm 2009 lúc 7:01Dec 21, 2009 at 7:01

1

Ví dụ cổ điển: Bạn muốn lưu trữ giá trị điểm là Tuple of [x, y]

Đã trả lời ngày 21 tháng 12 năm 2009 lúc 7:14Dec 21, 2009 at 7:14

ImranimranImran

84.3K23 Huy hiệu vàng96 Huy hiệu bạc129 Huy hiệu đồng23 gold badges96 silver badges129 bronze badges

3

salaries = {}
salaries[['John', 'Smith']] = 10000.0
salaries[['John', 'Parker']] = 99999.0

Chỉnh sửa 1 Tất nhiên bạn có thể làm salaries['John Smith'] = whatever, nhưng sau đó bạn sẽ phải làm thêm để tách khóa thành tên đầu tiên và tên cuối cùng. Thế còn pointColor[[x, y, z]] = "red", ở đây lợi ích của khóa Tuple là nổi bật hơn. Of course you can do salaries['John Smith'] = whatever, but then you'll have to do extra work to separate the key into first and last names. What about pointColor[[x, y, z]] = "red", here the benefit of tuple key is more prominent.

Tôi phải nhấn mạnh rằng đây không phải là thực hành tốt nhất. Trong nhiều trường hợp, bạn nên tạo ra các lớp học đặc biệt để xử lý các tình huống như thế, nhưng Arrieta đã yêu cầu các ví dụ, mà tôi đã đưa cho cô ấy [anh ấy].

Chỉnh sửa 0

Nhân tiện, mỗi phần tử tuple cũng phải có thể băm:

>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list objects are unhashable
>>>

Đã trả lời ngày 21 tháng 12 năm 2009 lúc 7:06Dec 21, 2009 at 7:06

Boris Gorelikboris GorelikBoris Gorelik

28.4K37 Huy hiệu vàng126 Huy hiệu bạc169 Huy hiệu đồng37 gold badges126 silver badges169 bronze badges

7

Trong bối cảnh học máy và học sâu, nếu bạn đang thực hiện tìm kiếm HyperParameter cho các siêu âm tốt nhất, thì việc sử dụng Tuples làm khóa chắc chắn là siêu hữu ích.

Giả sử bạn đang tìm kiếm sự kết hợp siêu đồng tính tốt nhất cho ____10,

>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list objects are unhashable
>>>
1 và
>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list objects are unhashable
>>>
2.

Sau đó, bạn có thể có một từ điển trong Python nơi bạn tạo ra sự kết hợp khác nhau mà các HPARAM này có thể lấy làm khóa và ma trận trọng lượng tương ứng của chúng từ thuật toán đào tạo làm giá trị

hparams_hist = {}
hparams_hist[[0.001, 0.7, 5]] = weight_matrix1
hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2

Những ma trận trọng lượng này là cần thiết hơn nữa để đưa ra dự đoán thời gian thực.

Đã trả lời ngày 18 tháng 11 năm 2017 lúc 16:40Nov 18, 2017 at 16:40

kmario23kmario23kmario23

53.6K13 Huy hiệu vàng149 Huy hiệu bạc146 Huy hiệu đồng13 gold badges149 silver badges146 bronze badges

1

Tôi sử dụng rất nhiều thời gian làm khóa

>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list objects are unhashable
>>>
3, ví dụ:

  • Tôi sử dụng chúng khi tôi phải tạo một khóa duy nhất từ ​​nhiều giá trị, ví dụ:

    Dựa trên

    >>> d = {}
    >>> t = [range[3], range[10, 13]]
    >>> d[t] = 11
    Traceback [most recent call last]:
      File "", line 1, in 
    TypeError: list objects are unhashable
    >>>
    
    4, khóa
    >>> d = {}
    >>> t = [range[3], range[10, 13]]
    >>> d[t] = 11
    Traceback [most recent call last]:
      File "", line 1, in 
    TypeError: list objects are unhashable
    >>>
    
    5 có thể là khóa =
    >>> d = {}
    >>> t = [range[3], range[10, 13]]
    >>> d[t] = 11
    Traceback [most recent call last]:
      File "", line 1, in 
    TypeError: list objects are unhashable
    >>>
    
    6 nhưng cách tốt hơn là
    >>> d = {}
    >>> t = [range[3], range[10, 13]]
    >>> d[t] = 11
    Traceback [most recent call last]:
      File "", line 1, in 
    TypeError: list objects are unhashable
    >>>
    
    7 vì

    1. Nó dễ đọc hơn, ngắn hơn và ít tính toán hơn
    2. Dễ dàng hơn để truy xuất các giá trị riêng lẻ
    3. Quan trọng nhất là
      >>> d = {}
      >>> t = [range[3], range[10, 13]]
      >>> d[t] = 11
      Traceback [most recent call last]:
        File "", line 1, in 
      TypeError: list objects are unhashable
      >>>
      
      8 là sai và có thể không cung cấp các khóa duy nhất cho tất cả các giá trị của
      >>> d = {}
      >>> t = [range[3], range[10, 13]]
      >>> d[t] = 11
      Traceback [most recent call last]:
        File "", line 1, in 
      TypeError: list objects are unhashable
      >>>
      
      4 và
      >>> d = {}
      >>> t = [range[3], range[10, 13]]
      >>> d[t] = 11
      Traceback [most recent call last]:
        File "", line 1, in 
      TypeError: list objects are unhashable
      >>>
      
      5, ví dụ: Khi các giá trị chứa
      hparams_hist = {}
      hparams_hist[[0.001, 0.7, 5]] = weight_matrix1
      hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2
      
      1
  • Lưu trữ kết quả của một hàm

    def func[a1, b1]:
        if [a1,b1] in cache: return cache[[a1,b1]]
        ...
    

Yamaneko

3.3232 Huy hiệu vàng36 Huy hiệu bạc56 Huy hiệu Đồng2 gold badges36 silver badges56 bronze badges

Đã trả lời ngày 21 tháng 12 năm 2009 lúc 7:36Dec 21, 2009 at 7:36

Anurag uniyalanurag uniyalAnurag Uniyal

83,8K39 Huy hiệu vàng170 Huy hiệu bạc216 Huy hiệu đồng39 gold badges170 silver badges216 bronze badges

Tôi đã sử dụng các bộ dữ liệu làm khóa từ điển trong ứng dụng so sánh các thiết bị mạng theo vị trí địa lý. Vì các thiết bị được đặt tên tương tự cho mỗi vị trí, nó cung cấp một cách tự nhiên để biết liệu một thiết bị có khớp với việc ghép đôi đó vẫn chưa được nhìn thấy trong khi xử lý bội số hay không.

i.e.

seen = {}
seen[['abc', 'lax']] = 1
seen[['xyz', 'nyc']] = 1

Đã trả lời ngày 21 tháng 12 năm 2009 lúc 7:37Dec 21, 2009 at 7:37

Jathanismjathanismjathanism

32.5K9 Huy hiệu vàng68 Huy hiệu bạc86 Huy hiệu Đồng9 gold badges68 silver badges86 bronze badges

Bạn sử dụng Tuples làm khóa khi bạn muốn hiển thị nhiều yếu tố tạo thành khóa cùng nhau.

Ví dụ:

hparams_hist = {}
hparams_hist[[0.001, 0.7, 5]] = weight_matrix1
hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2
2

Ở đây nếu chúng ta sử dụng riêng biệt

hparams_hist = {}
hparams_hist[[0.001, 0.7, 5]] = weight_matrix1
hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2
3 hoặc
hparams_hist = {}
hparams_hist[[0.001, 0.7, 5]] = weight_matrix1
hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2
4, chúng ta sẽ không đại diện cho điểm đó.

Đã trả lời ngày 30 tháng 5 năm 2016 lúc 4:09May 30, 2016 at 4:09

Ani Menonani MenonAni Menon

26.2K16 Huy hiệu vàng99 Huy hiệu bạc121 Huy hiệu đồng16 gold badges99 silver badges121 bronze badges

a[["John", "Doe"]] = "123 Fake Street"

Đã trả lời ngày 21 tháng 12 năm 2009 lúc 7:06Dec 21, 2009 at 7:06

Boris Gorelikboris Goreliktkerwin

28.4K37 Huy hiệu vàng126 Huy hiệu bạc169 Huy hiệu đồng1 gold badge30 silver badges46 bronze badges

Trong bối cảnh học máy và học sâu, nếu bạn đang thực hiện tìm kiếm HyperParameter cho các siêu âm tốt nhất, thì việc sử dụng Tuples làm khóa chắc chắn là siêu hữu ích.

Giả sử bạn đang tìm kiếm sự kết hợp siêu đồng tính tốt nhất cho ____10,

>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list objects are unhashable
>>>
1 và
>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list objects are unhashable
>>>
2.

Sau đó, bạn có thể có một từ điển trong Python nơi bạn tạo ra sự kết hợp khác nhau mà các HPARAM này có thể lấy làm khóa và ma trận trọng lượng tương ứng của chúng từ thuật toán đào tạo làm giá trịDec 21, 2009 at 7:22

Những ma trận trọng lượng này là cần thiết hơn nữa để đưa ra dự đoán thời gian thực.Dustin

Đã trả lời ngày 18 tháng 11 năm 2017 lúc 16:4013 silver badges14 bronze badges

53.6K13 Huy hiệu vàng149 Huy hiệu bạc146 Huy hiệu đồng

Tôi sử dụng rất nhiều thời gian làm khóa

>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list objects are unhashable
>>>
3, ví dụ:, counting how many people clicked the image3 after hovering on text2.

    funnels = defaultdict[int]
    funnels[['hovered_text2', 'clicked_image3']] += 1

Tôi sử dụng chúng khi tôi phải tạo một khóa duy nhất từ ​​nhiều giá trị, ví dụ:Jul 9, 2014 at 20:56

bit2pixelbit2pixelbit2pixel

Dựa trên

>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list objects are unhashable
>>>
4, khóa
>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list objects are unhashable
>>>
5 có thể là khóa =
>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list objects are unhashable
>>>
6 nhưng cách tốt hơn là
>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list objects are unhashable
>>>
7 vì8 silver badges8 bronze badges

Nó dễ đọc hơn, ngắn hơn và ít tính toán hơn

Đã trả lời ngày 22 tháng 10 năm 2016 lúc 7:56Oct 22, 2016 at 7:56

def getHash[word]:
    result={}
    for i in range[len[word]]:
        if word[i] in result:
            result[word[i]]+=1
        else :
            result[word[i]]=1

    return tuple [sorted[[result.items[]]]]


def groupAnagrams[words]:
    resultHash={}
    for i in range[len[words]]:
        s=getHash[words[i].lower[]]
        #print s
        if s in resultHash :
            l=list[resultHash[s]] 
            l.append[words[i]]
            resultHash[s] = l # list[resultHash[s]].append[words[i]]  
        else :
            resultHash[s]=[words[i]] # Creating list 

    return resultHash.values[]

Cramopy

3,4095 Huy hiệu vàng27 Huy hiệu bạc42 Huy hiệu đồng5 gold badges27 silver badges42 bronze badges

Đã trả lời ngày 6 tháng 5 năm 2016 lúc 17:42May 6, 2016 at 17:42

Tôi nghĩ rằng các bộ dữ liệu là các phím từ điển sẽ tốt, nếu chúng ta đang lưu trữ:-

  1. Một số điểm trong hệ tọa độ.

  2. Giúp gắn cờ vị trí của ma trận mà bạn muốn trong lần lặp tiếp theo. Ví dụ:-

    hparams_hist = {}
    hparams_hist[[0.001, 0.7, 5]] = weight_matrix1
    hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2
    
    6

Đã trả lời ngày 14 tháng 2 lúc 0:33Feb 14 at 0:33

Giả sử từ điển chứa các đối tượng và nhãn hiệu của bạn. Nếu bạn có cùng điểm trong hai đối tượng để chúng ta có thể sử dụng tupple.

D = {}

D [['toán', 'lịch sử']] = 74

Đã trả lời ngày 2 tháng 10 lúc 10:31Oct 2 at 10:31

1

Tuple có thể được sử dụng làm khóa từ điển trong Python MCQ không?

Câu trả lời.Có, một tuple là một giá trị băm và có thể được sử dụng làm khóa từ điển.Yes, a tuple is a hashable value and can be used as a dictionary key.

Chúng ta có thể vượt qua danh sách hoặc tuple như một chìa khóa trong từ điển không?

Ngay cả bộ dữ liệu cũng có thể là một chìa khóa.Một từ điển hoặc một danh sách không thể là một chìa khóa.A dictionary or a list cannot be a key.

Chúng ta có thể sử dụng tuple như một giá trị cho từ điển không?

Biết chữ và các loại bất biến như số, chuỗi và bộ dữ liệu đều có thể băm, và do đó có thể đóng vai trò là chìa khóa trong từ điển.can therefore serve as keys in dictionaries.

Tại sao một bộ không thể được sử dụng làm khóa từ điển nhưng có thể không?

Một tuple chỉ có thể phục vụ như một chìa khóa nếu tất cả các yếu tố của tuple có thể đóng vai trò là chìa khóa.Một dict không thể phục vụ như một chìa khóa [vì nó là có thể thay đổi].Câu trả lời kỹ thuật hơn ở đây là các phím Dict phải có thể băm, và tple s chỉ có thể băm nếu các yếu tố riêng lẻ của chúng có thể băm.Lưu câu trả lời này.because it is mutable]. The more technical answer here is that dict keys must be hashable, and that tuple s are only hashable if their individual elements are hashable. Save this answer.

Bài Viết Liên Quan

Chủ Đề