سؤال

تخيل أنك حصلت على الكيان في محرك جوجل التطبيق مخزن البيانات, تخزين الروابط للمستخدمين المجهولين.كنت ترغب في تنفيذ استعلام SQL التالي وهو غير معتمد:

SELECT DISTINCT user_hash FROM links

بدلا من ذلك يمكنك استخدام:

user = db.GqlQuery("SELECT user_hash FROM links")

كيفية استخدام بيثون أكثر كفاءة إلى تصفية النتائج ، لذلك عوائد متميزة النتيجة ؟ كيف تحسب متميزة النتيجة ؟

هل كانت مفيدة؟

المحلول

وهناك مجموعة وسيلة جيدة للتعامل مع ما يلي:

>>> a = ['google.com', 'livejournal.com', 'livejournal.com', 'google.com', 'stackoverflow.com']
>>> b = set(a)
>>> b
set(['livejournal.com', 'google.com', 'stackoverflow.com'])
>>> 

واقتراح واحد ث / ص / ر الجواب الأول، هو أن مجموعات وdicts هم الأفضل في استرجاع فريدة النتائج بسرعة، والعضوية في القوائم هي O (ن) مقابل O (1) لأنواع أخرى، لذلك إذا كنت ترغب في تخزين بيانات إضافية، أو تفعل شيئا مثل إنشاء قائمة unique_results المذكورة، قد يكون من الأفضل أن تفعل شيئا مثل:

unique_results = {}
>>> for item in a:
    unique_results[item] = ''


>>> unique_results
{'livejournal.com': '', 'google.com': '', 'stackoverflow.com': ''}

نصائح أخرى

إحياء هذا السؤال للإنجاز:

الكلمة الأساسية DISTINCT تم عرضه في الإفراج عن 1.7.4.

يمكنك العثور على تحديث GQL المرجعية (على سبيل المثال بايثون) هنا.

وخيار واحد يتمثل في وضع النتائج إلى كائن مجموعة:

http://www.python.org/doc /2.6/library/sets.html#sets.Set

وسوف تتألف مجموعة الناتجة فقط من قيم مميزة تمريرها إلى ذلك.

وإذا تعذر ذلك، وبناء على قائمة جديدة تحتوي فقط الكائنات الفريدة ستعمل. شيء من هذا القبيل:

unique_results = []
for obj in user:
    if obj not in unique_results:
        unique_results.append(obj)

ويمكن أن تكون موجزة وهذا حلقة for في قائمة الفهم أيضا.

وعذرا لحفر هذا السؤال حتى ولكن في GAE لا أستطيع مقارنة الكائنات من هذا القبيل، لا بد لي من استخدام يتضمن المنتج () للمقارنة من هذا القبيل:

وحذار، وهذا هو فعالة للغاية:

def unique_result(array):
    urk={} #unique results with key
    for c in array:
        if c.key() not in urwk:
            urk[str(c.key())]=c
    return urk.values()

وإذا كان أي شخص لديه حل أفضل، يرجى حصة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top