পাইথনে আমি ডিক কী হিসাবে একটি তালিকা কেন ব্যবহার করতে পারি না?


106

পাইথন ডিকের কী হিসাবে / কী ব্যবহার করা যায় না সে সম্পর্কে আমি কিছুটা বিভ্রান্ত।

dicked = {}
dicked[None] = 'foo'     # None ok
dicked[(1,3)] = 'baz'    # tuple ok
import sys
dicked[sys] = 'bar'      # wow, even a module is ok !
dicked[(1,[3])] = 'qux'  # oops, not allowed

সুতরাং একটি tuple একটি অপরিবর্তনীয় টাইপ কিন্তু আমি যদি এর ভিতরে একটি তালিকা আড়াল করি তবে এটি কী হতে পারে না .. আমি কি খুব সহজেই কোনও মডিউলটির ভিতরে কোনও তালিকা লুকিয়ে রাখতে পারি না?

আমার কিছু অস্পষ্ট ধারণা ছিল যে কীটি "হ্যাশেবল" হতে হবে তবে আমি প্রযুক্তিগত বিবরণ সম্পর্কে আমার নিজের অজ্ঞতা স্বীকার করতে চলেছি; আমি জানি না এখানে আসলে কী চলছে। যদি আপনি কীগুলি হিসাবে তালিকার তালিকাগুলি, হ্যাশ হিসাবে, তাদের স্মৃতির অবস্থানের সাথে ব্যবহার করার চেষ্টা করেন তবে কী ভুল হবে?


4
এখানে একটি ভাল আলোচনা: স্ট্যাকওভারফ্লো.com
হেরানান

51
আপনার পরিবর্তনশীল নামটি থেকে একটি ছাগল পেয়েছে।
kindall

উত্তর:


36

পাইথন উইকিতে এই বিষয়টিতে একটি ভাল নিবন্ধ রয়েছে: কেন তালিকাগুলি কী হতে পারে না অভিধান কীগুলি । সেখানে ব্যাখ্যা হিসাবে:

যদি আপনি কীগুলি হিসাবে তালিকার তালিকাগুলি, হ্যাশ হিসাবে, তাদের স্মৃতির অবস্থানের সাথে ব্যবহার করার চেষ্টা করেন তবে কী ভুল হবে?

এটি সত্যিই কোনও প্রয়োজনীয়তা ভঙ্গ না করেই করা যেতে পারে তবে এটি অপ্রত্যাশিত আচরণের দিকে পরিচালিত করে। তালিকাগুলি সাধারণত চিকিত্সা করা হয় যেন তাদের বিষয়বস্তুর মান থেকে তাদের মান উত্পন্ন হয়, উদাহরণস্বরূপ (ইন-) সাম্যতা পরীক্ষা করার সময়। অনেকগুলি - বোধগম্যভাবে - এমন প্রত্যাশা করবে যে আপনি [1, 2]একই কীটি পেতে কোনও তালিকা ব্যবহার করতে পারেন , যেখানে আপনাকে একই তালিকার অবজেক্টটি প্রায় রাখতে হবে। তবে কী হিসাবে ব্যবহৃত তালিকাকে সংশোধন করার সাথে সাথে মান ভেঙে দেখার চেষ্টা করা হয় এবং পরিচয় অনুসারে অনুসন্ধানের জন্য আপনাকে ঠিক একই তালিকাটি রাখা উচিত - যা অন্য কোনও সাধারণ তালিকা ক্রিয়াকলাপের জন্য প্রয়োজন হয় না (কমপক্ষে কোনওটিই আমি ভাবতে পারি না) )।

মডিউলগুলির মতো অন্যান্য অবজেক্টগুলি এবং objectযাইহোক যাইহোক (তাদের দুটি স্বতন্ত্র মডিউল অবজেক্টস sysকখন ডাকা হয়েছিল ? শেষবারে কখন ছিল ?) তাদের বস্তুর পরিচয় থেকে অনেক বড় চুক্তি করে এবং যাইহোক এটির সাথে তুলনা করা হয়। অতএব, এটি কম আশ্চর্যজনক - বা এমনকি প্রত্যাশিত - যে তারা যখন ডিক কী হিসাবে ব্যবহৃত হয়, সেই ক্ষেত্রে পরিচয়ের সাথেও তুলনা করে।


33

পাইথনে আমি ডিক কী হিসাবে একটি তালিকা কেন ব্যবহার করতে পারি না?

>>> d = {repr([1,2,3]): 'value'}
{'[1, 2, 3]': 'value'}

(যে কেউ এই প্রশ্নে হোঁচট খায় তার আশেপাশের উপায় খুঁজছেন)

এখানে অন্যদের দ্বারা ব্যাখ্যা হিসাবে, সত্যিই আপনি পারবেন না। আপনি যদি সত্যিই আপনার তালিকাটি ব্যবহার করতে চান তবে আপনি পরিবর্তে এর স্ট্রিং প্রতিনিধিত্ব ব্যবহার করতে পারেন।


6
দুঃখিত, আমি সত্যিই আপনার পয়েন্ট দেখতে পাচ্ছি না। স্ট্রিং লিটারেলগুলি কী হিসাবে ব্যবহার করা আলাদা নয়।
wim

12
সত্য; আমি কেবলমাত্র এতগুলি উত্তর দেখতে পেয়েছিলাম যে কেন আপনি 'কীটি হ্যাশযোগ্য হতে হবে' শর্তে তালিকাগুলি ব্যবহার করতে পারবেন না তা ব্যাখ্যা করেছিলাম, যা এতটাই সত্য যে আমি এর আশেপাশে কোনও উপায় প্রস্তাব করতে চেয়েছিলাম, যদি কেউ (নতুন) এটির সন্ধান করবে ...
রেমি

5
তালিকাকে কেবল একটি টুপলে রূপান্তরিত করবেন না কেন? কেন এটি একটি স্ট্রিং রূপান্তর? আপনি যদি একটি টিপল ব্যবহার করেন তবে এটি এমন ক্লাসগুলির সাথে সঠিকভাবে কাজ করবে যার একটি কাস্টম তুলনা পদ্ধতি রয়েছে __eq__। তবে আপনি যদি সেগুলিকে স্ট্রিংয়ে রূপান্তর করেন তবে তার স্ট্রিং প্রতিনিধিত্বের সাথে সবকিছুকে তুলনা করা হয়।
অরণ-ফে

অরন-ফাই ভাল পয়েন্ট কেবলমাত্র নিশ্চিত হয়ে নিন যে টিপলে থাকা কোনও উপাদান নিজেই লঞ্চযোগ্য। উদাহরণস্বরূপ টিপল ([[1,2], [2,3]]) কী হিসাবে কাজ করবে না কারণ টিপলের উপাদানগুলি এখনও তালিকাভুক্ত।
রেমি

21

সবেমাত্র আপনি তালিকাটিকে টুপলে রূপান্তর করতে পারেন, তারপরে কী হিসাবে ব্যবহার করুন।

d = {tuple([1,2,3]): 'value'}

16

বিষয়টি হ'ল টিউপলগুলি অপরিবর্তনীয়, এবং তালিকাগুলি নেই। নিম্নোক্ত বিবেচনা কর

d = {}
li = [1,2,3]
d[li] = 5
li.append(4)

কি d[li]ফিরতে হবে? এটি কি একই তালিকা? কীভাবে d[[1,2,3]]? এটির মান একই, তবে আলাদা তালিকা?

শেষ পর্যন্ত, কোন সন্তোষজনক উত্তর নেই। উদাহরণস্বরূপ, যদি কাজ করা একমাত্র কীটি মূল কী হয় তবে আপনার যদি সেই চাবিটির কোনও রেফারেন্স না থাকে তবে আপনি আর কখনও মানটি অ্যাক্সেস করতে পারবেন না। প্রতিটি অন্যান্য অনুমোদিত চাবি দিয়ে, আপনি মূলটির উল্লেখ ছাড়াই একটি কী তৈরি করতে পারেন।

যদি আমার উভয় পরামর্শই কাজ করে, তবে আপনার কাছে খুব আলাদা কী রয়েছে যা একই মানটি ফেরত দেয় যা কিছুটা অবাক হওয়ার চেয়ে বেশি। যদি কেবলমাত্র মূল বিষয়বস্তু কাজ করে তবে আপনার কীগুলি দ্রুত খারাপ হয়ে যাবে, যেহেতু তালিকাগুলি সংশোধন করার জন্য তৈরি করা হয়েছে।


হ্যাঁ, এটি একই তালিকা তাই আমি d[li]5 থাকার আশা করব would d[[1,2,3]]কী হিসাবে কোনও ভিন্ন তালিকার অবজেক্টটিকে উল্লেখ করা হবে, তাই এটি কী-এরর হবে। আমি আসলেই এখনও কোনও সমস্যা দেখতে পাচ্ছি না ... বাদে কোনও চাবি আবর্জনা সংগ্রহ করা কিছু ডিক মানকে অ্যাক্সেসযোগ্য করে তুলতে পারে। তবে এটি একটি ব্যবহারিক সমস্যা লজিকাল সমস্যা নয় ..
wim

@ উইম: কী-ইরার d[list(li)]হওয়া সমস্যাটির একটি অংশ। প্রায় প্রতিটি অন্যান্য ব্যবহারের ক্ষেত্রে , liঅভিন্ন বিষয়বস্তু সহ একটি নতুন তালিকা থেকে পৃথকযোগ্য। এটি কাজ করে তবে এটি অনেকের কাছে স্ব-স্বজ্ঞাত। প্লাস, আপনাকে শেষবার কখন সত্যই ডিক কী হিসাবে একটি তালিকা ব্যবহার করতে হয়েছিল? আমি কল্পনা করতে পারি কেবলমাত্র ব্যবহারের ক্ষেত্রে হ'ল আপনি যখন যাইহোক পরিচয় দিয়ে সবকিছু হ্যাশ করেন এবং সেই ক্ষেত্রে আপনার উপর নির্ভর করা __hash__এবং __eq__পরিচয় ভিত্তিক হওয়ার পরিবর্তে কেবল এটি করা উচিত ।

@ ডেলান সমস্যা কি কেবল এই জাতীয় জটিলতার কারণে খুব কার্যকর ডিক হিসাবে কার্যকর হবে না? বা এটি আসলে একটি ডিক ভাঙ্গতে পারে এমন কোনও কারণ আছে?
wim

4
@ উইম: পরেরটি। আমার উত্তরে যেমন বলা হয়েছে, এটি সত্যিকার অর্থে ডিক কীগুলির প্রয়োজনীয়তাগুলি ভঙ্গ করে না, তবে এটি সমাধান হওয়ার চেয়ে আরও সমস্যা প্রবর্তন করার সম্ভাবনা রয়েছে।

4
@ ডেলানান - আপনি বলতে চেয়েছিলেন 'প্রাক্তন'
জেসন

9

এখানে একটি উত্তর http://wiki.python.org/moin/D অভিধান Keys

যদি আপনি কীগুলি হিসাবে তালিকার তালিকাগুলি, হ্যাশ হিসাবে, তাদের স্মৃতির অবস্থানের সাথে ব্যবহার করার চেষ্টা করেন তবে কী ভুল হবে?

একই বিষয়বস্তুর সাথে বিভিন্ন তালিকা সন্ধান করা বিভিন্ন ফলাফল আনবে, যদিও একই সামগ্রীর সাথে তালিকাগুলি তুলনা করে তাদের সমতুল্য হিসাবে চিহ্নিত করে।

অভিধানের অনুসন্ধানে আক্ষরিক তালিকা ব্যবহার সম্পর্কে কী?


4

কারণ তালিকাগুলি পরিবর্তনীয়, dictকীগুলি (এবং setসদস্যদের) হ্যাশযোগ্য হওয়া দরকার, এবং পরিবর্তনীয় বস্তুগুলি হ্যাশ করা একটি খারাপ ধারণা কারণ হ্যাশ মানগুলি উদাহরণ বৈশিষ্ট্যের ভিত্তিতে গণনা করা উচিত

এই উত্তরে আমি কয়েকটি দৃ concrete় উদাহরণ দেব, আশা করি বিদ্যমান উত্তরগুলির উপরে মান যুক্ত করুন। প্রতিটি অন্তর্দৃষ্টি setডেটাস্ট্রাক্টরের উপাদানগুলিতেও প্রযোজ্য ।

উদাহরণ 1 : একটি পরিবর্তনীয় বস্তুর হ্যাশিং যেখানে হ্যাশ মানটি বস্তুর পরিবর্তিত বৈশিষ্ট্যের উপর ভিত্তি করে।

>>> class stupidlist(list):
...     def __hash__(self):
...         return len(self)
... 
>>> stupid = stupidlist([1, 2, 3])
>>> d = {stupid: 0}
>>> stupid.append(4)
>>> stupid
[1, 2, 3, 4]
>>> d
{[1, 2, 3, 4]: 0}
>>> stupid in d
False
>>> stupid in d.keys()
False
>>> stupid in list(d.keys())
True

পরিবর্তনের পরে stupid, হ্যাশ পরিবর্তিত হওয়ার কারণে এটি আর ডিকের সাথে আর খুঁজে পাওয়া যাবে না। ডিকের কীগুলি তালিকার তালিকায় কেবল একটি রৈখিক স্ক্যান stupid

উদাহরণ 2 : ... তবে কেন কেবল একটি ধ্রুবক হ্যাশ মান হয় না?

>>> class stupidlist2(list):
...     def __hash__(self):
...         return id(self)
... 
>>> stupidA = stupidlist2([1, 2, 3])
>>> stupidB = stupidlist2([1, 2, 3])
>>> 
>>> stupidA == stupidB
True
>>> stupidA in {stupidB: 0}
False

এটা একটা ভাল ধারণা হিসাবে ভাল কারণ সমান বস্তু অভিন্নরুপে যেমন যে আপনি তাদের একটি জানতে পারেন হ্যাশ উচিত নয় dictবা set

উদাহরণ 3 : ... ঠিক আছে, সমস্ত দৃষ্টান্ত জুড়ে ধ্রুব হ্যাশগুলির কী ?!

>>> class stupidlist3(list):
...     def __hash__(self):
...         return 1
... 
>>> stupidC = stupidlist3([1, 2, 3])
>>> stupidD = stupidlist3([1, 2, 3])
>>> stupidE = stupidlist3([1, 2, 3, 4])
>>> 
>>> stupidC in {stupidD: 0}
True
>>> stupidC in {stupidE: 0}
False
>>> d = {stupidC: 0}
>>> stupidC.append(5)
>>> stupidC in d
True

প্রত্যাশা মতো জিনিসগুলি কাজ করছে বলে মনে হয় তবে কী হচ্ছে তা নিয়ে চিন্তা করুন: যখন আপনার শ্রেণীর সমস্ত দৃষ্টান্ত একই হ্যাশ মান তৈরি করে, যখনই একটি dictবা উপস্থিতিতে কী হিসাবে দুটিরও বেশি উদাহরণ থাকবে তখন আপনার একটি হ্যাশ সংঘর্ষ হবে set

my_dict[key]বা key in my_dict(বা item in my_set) এর সাথে সঠিক উদাহরণ stupidlist3সন্ধানের জন্য ডিকের কীগুলিতে (সবচেয়ে খারাপ ক্ষেত্রে) উদাহরণ রয়েছে তত বেশি সমতা পরীক্ষা করতে হবে । এই মুহুর্তে, অভিধানের উদ্দেশ্য - ও (1) চেহারা - সম্পূর্ণ পরাজিত। এটি নিম্নলিখিত সময়গুলিতে প্রদর্শিত হয় (আইপিথন দিয়ে সম্পন্ন)।

উদাহরণ 3 জন্য কিছু সময়

>>> lists_list = [[i]  for i in range(1000)]
>>> stupidlists_set = {stupidlist3([i]) for i in range(1000)}
>>> tuples_set = {(i,) for i in range(1000)}
>>> l = [999]
>>> s = stupidlist3([999])
>>> t = (999,)
>>> 
>>> %timeit l in lists_list
25.5 µs ± 442 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit s in stupidlists_set
38.5 µs ± 61.2 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
>>> %timeit t in tuples_set
77.6 ns ± 1.5 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

আপনি দেখতে পাচ্ছেন, আমাদের সদস্যপদ পরীক্ষাটি stupidlists_setসামগ্রিকভাবে রৈখিক স্ক্যানের চেয়েও ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে lists_listহ্যাশ সংঘর্ষের সংঘর্ষ ছাড়াই আপনার একটি সেটে প্রত্যাশিত সুপার ফাস্ট লিকুইচিং টাইম (ফ্যাক্টর 500) থাকে।


টিএল; ডিআর: আপনি কী tuple(yourlist)হিসাবে ব্যবহার করতে পারেন dict, কারণ টিপলগুলি স্থাবর ও হ্যাশেবল।


>>> এক্স = (1,2,3321321321321,) >>> আইডি (এক্স) 139936535758888 >>> জেড = (1,2,3321321321321,) >>> আইডি (জেড) 139936535760544 >>> আইডি ((1, 2,3321321321321,)) 139936535810768 এই 3 টি একই ধরণের মান আছে তবে আলাদা আইডি রয়েছে। সুতরাং কী এক্স সহ একটি অভিধানের কী জেডটির কোনও মূল্য থাকবে না?
আশ্বানি

@ আশওয়ানি আপনি কি চেষ্টা করে দেখেছেন?
টিম্বেজ

হ্যাঁ, এটি আশানুরূপভাবে কাজ করছে, আমার সন্দেহ একই মানগুলির সমস্ত টিপলগুলিতে আলাদা আলাদা আইডি রয়েছে। তাহলে এই হ্যাশটি কোন ভিত্তিতে গণনা করা হয়?
আশ্বানি

@ আশওয়ানি @ এর হ্যাশ xএবং zএটি একই। যদি সে সম্পর্কে কিছু অস্পষ্ট হয় তবে দয়া করে একটি নতুন প্রশ্ন খুলুন।
টিমজেব

4
@ আশওয়ানি hash(x)এবং hash(z)
টিমজেব

3

আপনার জঞ্জাল এখানে পাওয়া যাবে:

তালিকা কী হতে পারে অভিধান কীগুলি নয় Ke

পাইথনে আগত আগতরা প্রায়শই বিস্মিত হন কেন, ভাষাতে দুটি টিউপল এবং তালিকার ধরণের উভয়ই অন্তর্ভুক্ত থাকে, তবে টিপলগুলি অভিধান কী হিসাবে ব্যবহারযোগ্য, যদিও তালিকাগুলি নেই। এটি ইচ্ছাকৃতভাবে নকশার সিদ্ধান্ত ছিল এবং পাইথন অভিধানগুলি কীভাবে কাজ করে তা প্রথমে বুঝতে পেরে সর্বোত্তমভাবে ব্যাখ্যা করা যেতে পারে।

উত্স এবং আরও তথ্য: http://wiki.python.org/moin/D অভিধানKeys


3

আপনার প্রশ্নের সহজ উত্তর হ'ল ক্লাস তালিকাগুলি হ্যাশ প্রয়োগ করে না যা কোনও পদার্থের জন্য প্রয়োজন যা অভিধানে কী হিসাবে ব্যবহার করতে চায় for তবে কেন হ্যাশটি একইভাবে প্রয়োগ করা হয়নি তার কারণেই বলা হয় যে টিপল ক্লাস (পাত্রে থাকা সামগ্রীর উপর ভিত্তি করে) কারণ একটি তালিকা পারস্পরিক পরিবর্তনযোগ্য তাই তালিকা সম্পাদনা করার জন্য হ্যাশটিকে পুনরায় গণনা করা দরকার যা তালিকাটির অর্থ হতে পারে আন্ডারলিং হ্যাশ টেবিলের মধ্যে এখন ভুল বালতিতে অবস্থিত। নোট করুন যেহেতু আপনি একটি টিপল (পরিবর্তনযোগ্য) পরিবর্তন করতে পারবেন না এটি এটি এই সমস্যার মধ্যে চলে না।

পার্শ্ব নোট হিসাবে, ডিক্টোবজেক্টস লুচিংয়ের আসল বাস্তবায়ন নুথ ভোল থেকে আলগোরিদম ডি এর উপর ভিত্তি করে। 3, সেকেন্ড 6.4। আপনার কাছে যদি সেই বইটি উপলভ্য থাকে তবে এটি যথার্থ পঠনযোগ্য হতে পারে, এছাড়াও যদি আপনি সত্যই সত্যই আগ্রহী হন তবে আপনি এখানে ডিকটোজেক্টের প্রকৃত বাস্তবায়নের বিষয়ে বিকাশকারীদের মন্তব্যে একটি উঁকি নিতে পছন্দ করতে পারেন এটি ঠিক কীভাবে কাজ করে তা দুর্দান্ত বিশদে যায়। এখানে একটা হল পাইথন বক্তৃতা অভিধান যা আপনি আগ্রহী হতে পারেন বাস্তবায়নের বিষয়ে। তারা একটি কী সংজ্ঞা এবং কি একটি হ্যাশ প্রথম কয়েক মিনিটের মধ্যে দিয়ে যেতে।


-1

পাইথন ২.7.২ ডকুমেন্টেশন অনুসারে:

কোনও বস্তুর হাশযোগ্য যদি এটির একটি হ্যাশ মান থাকে যা তার জীবদ্দশায় কখনও পরিবর্তন হয় না (এটির জন্য একটি হ্যাশ () পদ্ধতি প্রয়োজন) এবং অন্যান্য বস্তুর সাথে এটির তুলনা করা যেতে পারে (এটির জন্য একিউ () বা সিএমপি () পদ্ধতি প্রয়োজন)। সমান তুলনা করা যায় এমন হাস্যযোগ্য বস্তুর একই হ্যাশ মান থাকতে হবে।

হ্যাশাবিলিটি কোনও অভিধানকে কী এবং একটি সেট সদস্য হিসাবে ব্যবহারযোগ্য করে তোলে, কারণ এই ডেটা স্ট্রাকচারগুলি হ্যাশ মানটি অভ্যন্তরীণভাবে ব্যবহার করে।

পাইথনের সমস্ত অপরিবর্তনীয় অন্তর্নির্মিত অবজেক্টগুলি হ্যাশযোগ্য, যদিও কোনও পরিবর্তনীয় পাত্রে (যেমন তালিকাগুলি বা অভিধান) নেই। ব্যবহারকারী-সংজ্ঞায়িত শ্রেণীর উদাহরণস্বরূপ অবজেক্টগুলি ডিফল্টরূপে হ্যাশযোগ্য; তারা সকলেই অসম তুলনা করে এবং তাদের হ্যাশ মানটি তাদের আইডি ()।

একটি টিপল এই অর্থে অপরিবর্তনীয় যে আপনি এর উপাদানগুলি যুক্ত করতে, অপসারণ করতে বা প্রতিস্থাপন করতে পারবেন না, তবে উপাদানগুলি নিজেরাই পরিবর্তনীয় হতে পারে। তালিকার হ্যাশ মান তার উপাদানগুলির হ্যাশ মানগুলির উপর নির্ভর করে এবং তাই যখন আপনি উপাদানগুলি পরিবর্তন করেন তখন এটি পরিবর্তন হয়।

তালিকার হ্যাশগুলির জন্য আইডি ব্যবহার করে বোঝা যায় যে সমস্ত তালিকা আলাদাভাবে তুলনা করে যা আশ্চর্যজনক এবং অসুবিধাজনক হবে।


4
এটি প্রশ্নের উত্তর দেয় না, তাই না? hash = idপ্রথম অনুচ্ছেদের শেষে আক্রমণকারীকে ভাঙ্গবে না, প্রশ্ন হল কেন এটি সেভাবে করা হয়নি।

@ ডেলানান: আমি পরিষ্কার করতে শেষ অনুচ্ছেদটি যুক্ত করেছি।
নিকোলা মুসাত্তি

-1

একটি অভিধান হ্যাশম্যাপ এটি আপনার কীগুলির মানচিত্র সংরক্ষণ করে, একটি হ্যাশ নতুন কী এবং মান মানচিত্রটিতে রূপান্তরিত মান।

(স্যুইডো কোড) এর মতো কিছু:

{key : val}  
hash(key) = val

আপনি যদি ভাবছেন তবে কোনটি উপলভ্য বিকল্প যা আপনার অভিধানের কী হিসাবে ব্যবহার করা যেতে পারে। তারপর

যা কিছু হ্যাশযোগ্য (হ্যাশে রূপান্তরিত হতে পারে এবং স্থির মান ধরে রাখতে পারে (যেমন অপরিবর্তনীয় যাতে উপরে বর্ণিত একটি হ্যাশ কী তৈরি করা যায়) যোগ্য তবে তালিকা বা সেট অবজেক্টগুলি চলতে চলতে আলাদা হতে পারে তাই হ্যাশ (কী) এরও দরকার হওয়া উচিত আপনার তালিকাগুলি বা সেটটির সাথে সিঙ্ক করতে কেবল পরিবর্তিত হতে।

আপনি চেষ্টা করতে পারেন :

hash(<your key here>)

যদি এটি সূক্ষ্মভাবে কাজ করে তবে এটি আপনার অভিধানের কী হিসাবে ব্যবহৃত হতে পারে বা অন্যথায় এটি হ্যাশযোগ্য কিছুতে রূপান্তর করতে পারে।


সংক্ষেপে :

  1. সেই তালিকাতে রূপান্তর করুন tuple(<your list>)
  2. সেই তালিকাতে রূপান্তর করুন str(<your list>)

-1

dictকীগুলি হ্যাশেবল হওয়া দরকার। তালিকাগুলি পরিবর্তনীয় এবং তারা কোনও বৈধ হ্যাশ পদ্ধতি সরবরাহ করে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.