Finding the smartest set from an array of numbers
Review


Don't print() but return variables, so other functions can reuse the outcome.
Split up your code into functions, for re usability and to easier test parts of your code.
Write test cases using the unittest module rather then doing it from the CLI every time
There are some code improvements as well,


You could benefit from the collections.defaultdict module
An easier way to count the "1" in the binaray format is: str(bin(ele)[2:]).count("1")
You can benefit from list or dict comprehension, see PEP202



Alternative

import unittest
from collections import defaultdict

def smartest_set(array):
    smart_sets = defaultdict(list)

    for element in array:
        num_of_ones = str(bin(element)[2:]).count("1")
        smart_sets[num_of_ones].append(element)

    # If you'd really want the output be printed, you can add a print statement in the function
    result = [min(e) for e in smart_sets.values()]
    print(result)
    return result

class Test(unittest.TestCase):
    def test_smartest_set(self):
        array = [6, 2, 11, 1, 9, 14, 13, 4, 18]
        expected = [1, 6, 11]
        self.assertEqual(expected, smartest_set(array))

        # More tests here...

if __name__ == "__main__":
    unittest.main()


Or a slightly faster approach storing the minimum value of the counts only

def smartest_set_2(array):
    smarts = {}
    for ele in array:
        num_of_ones = str(bin(ele)[2:]).count("1")
        smarts[num_of_ones] = min(ele, smarts.get(num_of_ones, float('inf'))
    return smarts.values()