2012-12-23 17 views
5

मैं ग्राफ़ ऑब्जेक्ट को सॉर्ट करना चाहता हूं जिसे मैंने पायथन में नेटवर्कक्स लाइब्रेरी के माध्यम से पढ़ा है, एडजवेइट के बढ़ते क्रम में। ऐसा लगता है कि sort पायथन का आदेश ग्राफ ऑब्जेक्ट्स पर लागू नहीं होगा। मुझे यकीन है कि इस ऑब्जेक्ट को सॉर्ट करने का एक आसान तरीका है, लेकिन मुझे यकीन नहीं है कि कैसे। किसी भी तरह की सहायता को आभार समझेंगे।नेटवर्कक्स ग्राफ़ ऑब्जेक्ट को सॉर्ट करना पायथन

उदाहरण के लिए, मेरी पहली तीन किनारों

1 3 5250 
1 4 74 
1 5 3659 

हैं छँटाई मैं आशा करता हूं कि उनके आदेश

1 4 74 
1 5 3659 
1 3 5250 

यहाँ करने के लिए बदल गया है के बाद मेरी कोड अब तक

import networkx as nx 
g=nx.read_weighted_edgelist(fname,nodetype=int) 

है मैं ऑब्जेक्ट g को सॉर्ट करने का प्रयास कर रहा हूं।

+0

क्या आप "ग्राफ़ ऑब्जेक्ट को सॉर्ट करें" द्वारा अपना क्या मतलब है इसके बारे में अधिक विशिष्ट हो सकते हैं? किनारे के वजन को बढ़ाकर आदेशों की एक सूची प्राप्त करें? सभी किनारों पर किनारे के वजन को बढ़ाकर आदेशित नोड्स की एक सूची प्राप्त करें? अधिकतम बढ़त वजन से? आदि – DSM

+0

मुझे किनारे के वजन को बढ़ाकर आदेशों की सूची प्राप्त करने की आवश्यकता है। मैं तदनुसार सवाल अपडेट करूंगा। – hardikudeshi

उत्तर

8
import networkx as nx 
edgelist = [ 
    (1, 3, {'weight':5250}), 
    (1, 4, {'weight': 74}), 
    (1, 5, {'weight': 3659})] 

G = nx.Graph(edgelist) 
for a, b, data in sorted(G.edges(data=True), key=lambda x: x[2]['weight']): 
    print('{a} {b} {w}'.format(a=a, b=b, w=data['weight'])) 

पैदावार

1 4 74 
1 5 3659 
1 3 5250 
+0

यह सॉर्ट करता है, लेकिन अब ऑब्जेक्ट अब ग्राफ ऑब्जेक्ट नहीं है। क्या ऑब्जेक्ट को ग्राफ ऑब्जेक्ट के रूप में बनाए रखना संभव है। – hardikudeshi

+0

'जी' अभी भी एक 'ग्राफ' ऑब्जेक्ट है। आप किनारों को 'जी [ए] [बी] 'के साथ एक्सेस कर सकते हैं। – unutbu

+0

मैंने डायरेक्ट ग्राफ का उपयोग किया है। लगता है कि लूप 3 में अमान्य वाक्यविन्यास त्रुटि दे रहा है। क्या मुझे कुछ याद आ रही है? – Bonson

3

अंतर्निहित sort फ़ंक्शन में key पैरामीटर है जो एक फ़ंक्शन लेता है। यदि यह निर्दिष्ट है, तो सॉर्ट मूल तत्वों के लिए मुख्य फ़ंक्शन के अनुप्रयोग के परिणाम के अनुसार संग्रह को सॉर्ट करेगा।

>>> sorted([1,2,3], key=lambda x:-x) 
[3, 2, 1] 

आप अपने विशेष मामले में अधिक जानकारी के here

पा सकते हैं, अगर आप किनारे वजन से सॉर्ट करने के लिए की जरूरत है और आप किनारों की एक सूची है, तो आप समारोह है कि करने के लिए एक बढ़त नक्शे उपलब्ध कराने की आवश्यकता है अपने वजन:

sorted(list_of_edges, key= lambda edge: edge['weight']) 
+0

ऐसा लगता है कि 'sort' ग्राफ ऑब्जेक्ट पर लागू नहीं होता है। जब मैंने 'g.sort() 'की कोशिश की, तो मुझे एक त्रुटि मिली' ग्राफ 'ऑब्जेक्ट में कोई विशेषता नहीं है' sort'' – hardikudeshi

+0

@ हरदीकुदेशी वास्तव में, यह 'ग्राफ' का एक कार्य नहीं है, हालांकि यह कुछ अंतर्निहित प्रकारों की तरह है 'list'। आप अभी भी 'सॉर्टेड' फ़ंक्शन का उपयोग कर सकते हैं, हालांकि – goncalopp

संबंधित मुद्दे