ত্রুটি: "'ডিক্ট' অবজেক্টটির 'ইটারিটামস' এর কোনও বৈশিষ্ট্য নেই"


436

আমি একটি শ্যাপফিল পড়ার জন্য নেটওয়ার্কএক্স ব্যবহার করার চেষ্টা করছি write_shp()এবং নোড এবং প্রান্তগুলি ধারণ করে এমন শেফিলগুলি তৈরি করতে ফাংশনটি ব্যবহার করব, কিন্তু আমি কোডটি চালানোর চেষ্টা করলে এটি আমাকে নীচের ত্রুটি দেয়:

Traceback (most recent call last):   File
"C:/Users/Felipe/PycharmProjects/untitled/asdf.py", line 4, in
<module>
    nx.write_shp(redVial, "shapefiles")   File "C:\Python34\lib\site-packages\networkx\readwrite\nx_shp.py", line
192, in write_shp
    for key, data in e[2].iteritems(): AttributeError: 'dict' object has no attribute 'iteritems'

আমি পাইথন ৩.৪ ব্যবহার করছি এবং পাইপ ইনস্টলের মাধ্যমে নেটওয়ার্কএক্স ইনস্টল করেছি।

এই ত্রুটি আগে এটি ইতিমধ্যে আমাকে অন্য এক যে বলেন, "xrange অস্তিত্ব নেই" বা ওই জাতীয় কিছু দিয়েছিলেন, তাই আমি এটা তাকিয়ে এইমাত্র পরিবর্তন xrangeকরতে rangenx_shp.py ফাইল, যার ফলে এটি সমাধান করলো হবে।

আমি যা পড়েছি তা থেকে পাইথন সংস্করণ (পাইথন 2 বনাম পাইথন 3) সম্পর্কিত হতে পারে।


231
পাইথন 3 নামকরণ করা হয়েছে dict.iteritems -> dict.items
ব্লেন্ডার

1
ওহ বাহ আমি এখনই খুব নির্বোধ বোধ করছি, উত্তরের জন্য ধন্যবাদ
23-15

6
@Blender: না, এটা নামান্তর করা হয়নি iteritemsকরতে items। প্রাক্তন আপনাকে পুনরুক্তি দিয়েছিল (এবং 3.x এর কোনও পদ্ধতি নেই); পরেরটি আপনাকে একটি দর্শন দেয় (যা ২.7 হিসাবে ব্যাকপোর্ট করা হয়েছিল viewitems)।
23-25


এটি ওপি মূলত যার সাথে লিঙ্ক হয়েছে তার সমতুল্য পৃষ্ঠা হতে পারে বা নাও হতে পারে: নেটওয়ার্কেক্সেক্স.github.io/docamentation/latest/references/readwrite/…
নাথন আর্থার

উত্তর:


881

আপনি পাইথন 3 এ থাকায় dict.items()পরিবর্তে ব্যবহার করুনdict.iteritems()

iteritems() পাইথন 3 এ সরানো হয়েছে, সুতরাং আপনি এই পদ্ধতিটি আর ব্যবহার করতে পারবেন না।

পাইথন 3.0.০ উইকি অন্তর্নির্মিত পরিবর্তন বিভাগটি দেখুন, যেখানে এটি বলা হয়েছে:

সরানো dict.iteritems(), dict.iterkeys()এবং dict.itervalues()

পরিবর্তে: ব্যবহার dict.items(), dict.keys()এবং dict.values() যথাক্রমে।


এটির আরও আলোচনা আনুষ্ঠানিকভাবে পিইপি 469 তে লিপিবদ্ধ আছে । প্রস্তাবিত পদ্ধতির ব্যবহার করতে উপস্থিত হতে পারে iteritemsএর ফাংশন future.utilsবা sixপরিবর্তে মডিউল।
ম্যাক

33

ইন Python2 , আমরা ছিল .items()এবং .iteritems()অভিধান পারে। dict.items()অভিধানে tuples তালিকা ফিরে [(k1,v1),(k2,v2),...]। এটি অভিধানে সমস্ত টিপল অনুলিপি করে নতুন তালিকা তৈরি করেছে। অভিধানটি যদি খুব বড় হয় তবে মেমরির খুব বড় প্রভাব রয়েছে।

সুতরাং তারা dict.iteritems()পাইথন 2 এর পরবর্তী সংস্করণগুলিতে তৈরি করেছে। এই পুনরাবৃত্তি পুনরুদ্ধার বস্তু। পুরো অভিধান অনুলিপি করা হয়নি তাই মেমরির খরচ কম। নিম্নলিখিত কোডগুলিতে যেমন ব্যাখ্যা করা হয়েছে তেমন দক্ষতার পরিবর্তে Python2ব্যবহারকারীদের ব্যবহার করতে শেখানো হয় ।dict.iteritems().items()

import timeit

d = {i:i*2 for i in xrange(10000000)}  
start = timeit.default_timer()
for key,value in d.items():
    tmp = key + value #do something like print
t1 = timeit.default_timer() - start

start = timeit.default_timer()
for key,value in d.iteritems():
    tmp = key + value
t2 = timeit.default_timer() - start

আউটপুট:

Time with d.items(): 9.04773592949
Time with d.iteritems(): 2.17707300186

ইন Python3 , তারা এটা আরো দক্ষ, তাই সরানো করতে চেয়েছিলেন dictionary.iteritems()করার dict.items(), এবং সরানো .iteritems()যেমন আর প্রয়োজন পড়তো।

আপনি ব্যবহার করেছেন dict.iteritems()মধ্যে Python3তাই এটি ব্যর্থ হয়েছে। ব্যবহার করার চেষ্টা করুন dict.items()যা একই কার্যকারিতা থাকে dict.iteritems()এর Python2। এই থেকে একটি অতি ক্ষুদ্র অংশ মাইগ্রেশন ইস্যু Python2করার Python3


5

আমার একই রকম সমস্যা ছিল (3.5 ব্যবহার করে) এবং এতে প্রতিদিন 1/2 হারিয়েছি তবে এখানে এমন কিছু কাজ করে যা আমি অবসরপ্রাপ্ত এবং কেবল পাইথন শিখছি যাতে আমি আমার নাতি (12) কে এটির সাথে সহায়তা করতে পারি।

mydict2={'Atlanta':78,'Macon':85,'Savannah':72}
maxval=(max(mydict2.values()))
print(maxval)
mykey=[key for key,value in mydict2.items()if value==maxval][0]
print(mykey)
YEILDS; 
85
Macon

5

Python2 সালে dictionary.iteritems()অধিক কার্যকরী হয় dictionary.items()তাই Python3 এ, কার্যকারিতা dictionary.iteritems()নিয়ে যাওয়া হয়েছে dictionary.items()এবং iteritems()মুছে ফেলা হবে। সুতরাং আপনি এই ত্রুটি পাচ্ছেন।

dict.items()পাইথন 3 ব্যবহার করুন যা পাইথন dict.iteritems()2 এর সমান ।


-1

এর উদ্দেশ্য .iteritems()হ'ল লুপিংয়ের সময় একবারে একটি ফল করে কম মেমরির জায়গা ব্যবহার করা। আমি নিশ্চিত নই যে পাইথন 3 সংস্করণটি সমর্থন করে না iteritems()যদিও এটি এর চেয়ে কার্যকর হিসাবে প্রমাণিত হয়েছে.items()

আপনি যদি এমন কোনও কোড অন্তর্ভুক্ত করতে চান যা পিওয়াই সংস্করণ 2 এবং 3 উভয় সমর্থন করে,

try:
    iteritems
except NameError:
    iteritems = items

আপনি যদি অন্য কোনও সিস্টেমে আপনার প্রকল্প স্থাপন করেন এবং আপনি পিওয়াই সংস্করণ সম্পর্কে নিশ্চিত না হন তবে এটি সহায়তা করতে পারে।


-1

রাফায়েলসি উত্তর হিসাবে পাইথন 3 এর নাম পরিবর্তন করেছেন ডিক্টিমিটারাইটেমস -> ডিক্টিমাইটস। একটি পৃথক প্যাকেজ সংস্করণ চেষ্টা করুন। এটি উপলব্ধ প্যাকেজগুলি তালিকাভুক্ত করবে:

python -m pip install yourOwnPackageHere==

তারপরে সংস্করণটি পুনরায় চালু করুন আপনি == পরে সংস্করণটি ইনস্টল / স্যুইচ করতে চেষ্টা করবেন

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